如何替换sql server中列的第一个和最后一个字符?

时间:2014-03-12 13:09:46

标签: sql sql-server-2008

我有一个数据库列,它提供了一个类似,Recovery, Pump Exchange,的字符串。

我想从字符串中删除第一个和最后一个逗号。

预期结果:Recovery, Pump Exchange

9 个答案:

答案 0 :(得分:21)

您可以使用SUBSTRING

SELECT
    SUBSTRING(col, 2, LEN(col)-2)
FROM ...

显然,如果这是一个选项,更好的办法就是不要在前面放置前导和尾随逗号。

  

我想删除最后一个逗号和第一个逗号,否则不存在。

表达式变得有点复杂,但想法仍然相同:

SELECT SUBSTRING(
    col
,  CASE LEFT(@col,1) WHEN ',' THEN 2 ELSE 1 END
,  LEN(@col) -- Start with the full length
             -- Subtract 1 for comma on the left
      - CASE LEFT(@col,1) WHEN ',' THEN 1 ELSE 0 END 
             -- Subtract 1 for comma on the right
      - CASE RIGHT(@col,1) WHEN ',' THEN 1 ELSE 0 END
)
FROM ...

答案 1 :(得分:4)

除了dasblinkenlight的方法,你可以使用replace:

DECLARE @words VARCHAR(50) = ',Recovery, Pump Exchange,'
SELECT REPLACE(','+ @words + ',',',,','')

答案 2 :(得分:3)

使用LEN可能会适得其反,因为LEN会忽略尾随空格。由于ANSI_PADDING默认为ON,因此可以添加这些。所以,你需要RTRIM。

为了完整起见,我也添加了LTRIM ......

REVERSE(SUBSTRING(REVERSE(RTRIM(LTRIM(SUBSTRING(MyCol, 2, 8000)))), 2, 8000))

答案 3 :(得分:1)

使用Substring()

SET @String=SUBSTRING(@String ,2,Len(@String)-2)

SUBSTRING()返回表达式的一部分。

语法:

SUBSTRING ( expression ,start , length )

答案 4 :(得分:0)

试试这样:

if(Substring(@mykeyword, 1,1) = ',' and Substring(@mykeyword, LEN(@mykeyword) - 1, LEN(@mykeyword))=',')
SET @mykeyword = Substring(@mykeyword, 2, LEN(@mykeyword) - 2)

答案 5 :(得分:0)

SELECT LEFT(RIGHT(',Recovery, Pump Exchange,',LEN(',Recovery, Pump Exchange,')-1),LEN(',Recovery, Pump Exchange,')-2)

答案 6 :(得分:0)

要删除相同的字符,可以使用下面的系统功能TRIM

仅来自 2017

DECLARE @str VARCHAR(MAX) = '[REMOVE THIS CLOSE BRACKET]'

SELECT TRIM('[]' FROM @str)

但是对于其他字符删除,您需要使用SUBSTRING

SELECT SUBSTRING(@str,2,LEN(@str)-2)

答案 7 :(得分:0)

这是一篇旧文章,但是我决定添加我的解决方案,因为它将删除逗号分隔的字符串的第一个和最后一个逗号,而不会删除其他逗号,并且还将处理不是以逗号开头的字符串:

DECLARE @words VARCHAR(50) = ',Recovery, Pump Exchange,'
SELECT REPLACE(SUBSTRING(@words , 1, 1),',','') + SUBSTRING(@words, 2, LEN(@words)-2) + REPLACE(SUBSTRING(@words, LEN(@words), 1), ',', '')

答案 8 :(得分:0)

您可以尝试使用SUBSTRING来替换表中列的第一个和最后一个字符。

在此示例中,我使用了双引号(“)而不是逗号(,)。如果列值以双引号(”)开头并以双引号结束,则它将仅替换第一个和最后一个字符(“)。 (“)。

DECLARE @tblProducts TABLE (ProductName VARCHAR(100))

INSERT INTO @tblProducts VALUES ('"Recovery 10x12" Pump Exchange"')
INSERT INTO @tblProducts VALUES ('"Recovery Pump Exchange 10x12""')
INSERT INTO @tblProducts VALUES ('Recovery Pump Exchange 10x12"')

--REPLACE Last Char(")
UPDATE @tblProducts SET ProductName = SUBSTRING(ProductName, 1, len(ProductName) - 1) FROM @tblProducts WHERE ProductName LIKE '"%' AND ProductName LIKE '%"'

--REPLACE First Char(")
UPDATE @tblProducts SET ProductName = SUBSTRING(ProductName, 2, len(ProductName) - 1) FROM @tblProducts WHERE ProductName LIKE '"%'

SELECT * FROM @tblProducts

结果:

enter image description here