Jus*_*tin 4 sql sql-server sql-server-2008
我在 SQL 表中有一个文本备注字段,如果它是逗号,我需要删除该字段中的最后一个字符。
因此,例如,如果我有这些行,我需要从第 2 行和第 4 行中删除逗号。
INETSHORTD
1 94
2 85,
3 94, 92
4 89, 99, 32,
Run Code Online (Sandbox Code Playgroud)
输出将是:
INETSHORTD
94
85
94, 92
89, 99, 32
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
使用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
Run Code Online (Sandbox Code Playgroud)
首先,您希望TRIM您的数据摆脱前导和尾随空格。然后REVERSE它并检查第一个字符是否为,. 如果是,删除它,否则什么都不做。然后REVERSE它又回来了。您可以使用 删除第一个字符STUFF(string, 1, 1, '')。
小智 7
不确定该语法在 2015 年是否可用,但我认为这是一个更优雅的解决方案。
SELECT TRIM(',' from INETSHORTD) FROM TABLE
Run Code Online (Sandbox Code Playgroud)
如果特定字符串以 结尾,则使用 case 语句,使用 LEFT 函数和 lenght - 1 取子字符串
Select
CASE
WHEN INETSHORTD LIKE '%,' THEN LEFT(INETSHORTD, LEN(INETSHORTD)-1)
ELSE INETSHORTD
END
From yourtable
Run Code Online (Sandbox Code Playgroud)
这是一种更优雅/可读的方式:
SET @string = REPLACE(@string + '<END>', ',<END>', '')
Run Code Online (Sandbox Code Playgroud)
如果您不能确定最后一个逗号是否出现在字符串中,请使用以下命令:
SET @string = REPLACE(REPLACE(@string + '<END>', ',<END>', ''), '<END>', '')
Run Code Online (Sandbox Code Playgroud)