修剪SQL字符串中的特殊字符

时间:2014-01-23 15:34:54

标签: sql sql-server sql-server-2008

我正在使用SQL Server 2008

我的列中有sql字符串,其中;分隔值。我如何修剪以下值

当前字符串: ;145615;1676288;178829;

输出: 145615;1676288;178829;

请帮助sql查询修剪字符串

中的第一个;

注意:第一个字符可能是;,也可能不是;,如果它是DECLARE @VAL VARCHAR(1000) BEGIN SET @VAL =';13342762;1334273;' IF(CHARINDEX(';',@VAL,1)=1) BEGIN SELECT SUBSTRING(@VAL,2,LEN(@VAL)) END ELSE BEGIN SELECT @VAL END END ,那么只有它应该修剪。

编辑:我之前尝试过的内容,虽然经过这么多好的回复后没有意义。

{{1}}

4 个答案:

答案 0 :(得分:11)

SELECT CASE WHEN col LIKE ';%' 
  THEN STUFF(col,1,1,'') ELSE col END
  FROM dbo.table;

答案 1 :(得分:6)

只需检查第一个字符,如果匹配,则从第二个字符开始:

SELECT CASE WHEN SUBSTRING(col,1,1) = ';'
       THEN SUBSTRING(col,2,LEN(col))
       ELSE col
       END AS col

答案 2 :(得分:2)

以下是一个例子:

DECLARE @v varchar(10)
SET @v = ';1234'

SELECT
    CASE
        WHEN LEFT(@v,1) = ';' THEN RIGHT(@v, LEN(@v) - 1)
        ELSE @v
    END

答案 3 :(得分:2)

@Aaron Bertrand's answer的进一步发展:

SELECT
  STUFF(col, 1, PATINDEX(';%', col), '')
FROM ...

PATINDEXLIKE类似,因为它使用模式搜索,但作为一个函数,它还返回第一个匹配的位置。在这种情况下,由于我们专门在字符串的开头查找;,因此返回的位置将为1(如果找到)或0(如果未找到)。如果为1,则STUFF函数将删除字符串开头的1个字符,如果位置为0,则STUFF将删除0个字符。