我有一个SQL表中的文本备忘录字段,如果该字段的最后一个字符是逗号,我需要将其删除。
例如,如果我有以下行,则需要从第2行和第4行中删除逗号。
INETSHORTD
1 94
2 85,
3 94, 92
4 89, 99, 32,
输出结果将会是:
INETSHORTD
94
85
94, 92
89, 99, 32
有什么想法吗?
我有一个SQL表中的文本备忘录字段,如果该字段的最后一个字符是逗号,我需要将其删除。
例如,如果我有以下行,则需要从第2行和第4行中删除逗号。
INETSHORTD
1 94
2 85,
3 94, 92
4 89, 99, 32,
INETSHORTD
94
85
94, 92
89, 99, 32
这是更优雅 / 可读性更好的方法:
SET @string = REPLACE(@string + '<END>', ',<END>', '')
如果你不能确定最后一个逗号是否出现在字符串中,可以使用以下方法:SET @string = REPLACE(REPLACE(@string + '<END>', ',<END>', ''), '<END>', '')
使用 REVERSE
和 STUFF
函数:
SELECT
REVERSE(
STUFF(
REVERSE(LTRIM(RTRIM(INETSHORTD))),
1,
CASE WHEN SUBSTRING((REVERSE(LTRIM(RTRIM(INETSHORTD)))), 1, 1) = ',' THEN 1 ELSE 0 END,
''
)
)
FROM tbl
首先,你需要对数据进行TRIM
操作,以去除前导和尾随的空格。然后将其REVERSE
反转,并检查第一个字符是否为,
。如果是,则删除它,否则不做任何操作。然后再次REVERSE
反转回来。您可以使用STUFF(string, 1, 1, '')
来删除第一个字符。
不确定这种语法在2015年是否可用,但我认为这是一种更优雅的解决方案。
SELECT TRIM(',' from INETSHORTD) FROM TABLE
SELECT REVERSE(STUFF(REVERSE(LTRIM(RTRIM(INETSHORTD))), 1, CASE WHEN SUBSTRING((REVERSE(LTRIM(RTRIM(INETSHORTD)))), 1, 1) = ',' THEN 1 ELSE 0 END, '')) FROM tbl
- Zach Smith如果特定字符串以“,”结尾,则使用LEFT函数和长度-1获取子字符串。
Select
CASE
WHEN INETSHORTD LIKE '%,' THEN LEFT(INETSHORTD, LEN(INETSHORTD)-1)
ELSE INETSHORTD
END
From yourtable
SELECT IIF( CHARINDEX( ',', tmp.SHORTD, LEN( tmp.SHORTD ) ) > 0
, LEFT( tmp.SHORTD, LEN( tmp.SHORTD ) - 1 )
, tmp.SHORTD )
FROM tmp
declare @t table (id varchar(20))
insert into @t(id)values ('94,'),('85,'),('94, 92'),('89, 99, 32,')
SELECT REVERSE(SUBSTRING( REVERSE(id), PATINDEX('%[A-Za-z0-9]%',REVERSE(id)),
LEN(id) - (PATINDEX('%[A-Za-z0-9]%',REVERSE(id)) - 1) ) )
FROM @t