SQL Server TRIM字符

Nat*_*Pet 16 sql trim character

我有以下字符串:'BOB*',我如何修剪*所以它显示为'BOB'

我尝试了RTRIM('BOB*','*'),但不起作用,因为只需要1个参数.

Tee*_*jay 21

TRIM char FROM stringMS SQL Server中实现Oracle的另一个很好的方法如下:

  • 首先,您需要识别一个永远不会在字符串中使用的字符 ~
  • 用该字符替换所有空格
  • *可以用空格替换要修剪的字符
  • LTrim+ RTrim获得的字符串
  • 用修剪后的字符替换所有空格 *
  • 用空格替换所有从未使用过的字符

例如:

REPLACE(REPLACE(LTrim(RTrim(REPLACE(REPLACE(string,' ','~'),'*',' '))),' ','*'),'~',' ')
Run Code Online (Sandbox Code Playgroud)


Chr*_*uez 17

CREATE FUNCTION dbo.TrimCharacter
(
    @Value NVARCHAR(4000),
    @CharacterToTrim NVARCHAR(1)
)
RETURNS NVARCHAR(4000)
AS
BEGIN
    SET @Value = LTRIM(RTRIM(@Value))
    SET @Value = REVERSE(SUBSTRING(@Value, PATINDEX('%[^'+@CharacterToTrim+']%', @Value), LEN(@Value)))
    SET @Value = REVERSE(SUBSTRING(@Value, PATINDEX('%[^'+@CharacterToTrim+']%', @Value), LEN(@Value)))
    RETURN @Value
END
GO
--- Example
----- SELECT dbo.TrimCharacter('***BOB*********', '*')
----- returns 'BOB'
Run Code Online (Sandbox Code Playgroud)


Mik*_*Vee 11

如果你想删除所有的星号,那么很明显:

SELECT REPLACE('Hello*', '*', '')
Run Code Online (Sandbox Code Playgroud)

但是,如果你最后有多个星号,并且多个星号,但只对修剪尾随的星号感兴趣,那么我会使用这个:

DECLARE @String VarChar(50) = '**H*i****'
SELECT LEFT(@String, LEN(REPLACE(@String, '*', ' ')))              --Returns: **H*i
Run Code Online (Sandbox Code Playgroud)

我更新了这个答案,包括show如何删除主角:

SELECT RIGHT(@String, LEN(REPLACE(REVERSE(@String), '*', ' ')))    --Returns: H*i****
Run Code Online (Sandbox Code Playgroud)

LEN()有一个" 功能 "(看起来很像一个bug),它不计算尾随空格.

  • @Teejay由于向后兼容的原因,现在无法改变`LEN`的行为.忽略尾随空白区域是如何记录工作的,因此不会被识别为错误. (6认同)

pau*_*iss 5

LEFT('BOB*', LEN('BOB*')-1)
Run Code Online (Sandbox Code Playgroud)

应该这样做。

  • 这将从字符串中删除最后一个字符,无论该字符是否为星号。这在以星号结尾的字符串的特殊情况下有效,但不检查是否应删除最后一个字符。 (23认同)
  • 它也不会修剪多个星号。 (7认同)
  • **`LEFT('BOB *',3)`** (3认同)
  • 原始问题不是说“我只想删除星号(如果有的话)”或“我想删除所有星号,无论有多少个”。我回答了提出的问题。 (2认同)
  • 它会从值中删除最后一个字符,无论该字符是特殊字符还是字母或数字,这根本不是通用解决方案。如果仅对“ BOB”进行操作,则结果将为“ BO”,根据问题无效。 (2认同)
  • 这不是通用的解决方案,因为它不是通用的问题。关于一个字符串,这是一个非常具体的问题。 (2认同)