【问题标题】:SQL Server - select substring of all characters following last hyphenSQL Server - 选择最后一个连字符后所有字符的子字符串
【发布时间】:2015-10-17 20:41:56
【问题描述】:
我正在使用产品数据库,试图从组合 ID/颜色代码列中提取产品颜色,其中颜色代码始终是列中最后一个连字符后面的字符串。问题是连字符数、产品 ID 和颜色代码都可能不同。
这里有四个例子:
ABC123-001
BCD45678-0165
S-XYZ999-M2235
A-S-ABC123-001
在这种情况下,颜色代码将是 001、0165、M2235 和 001。将这些选择到自己的列中的最佳方法是什么?
【问题讨论】:
标签:
sql
sql-server
substring
【解决方案1】:
我认为以下内容可以满足您的要求:
select right(col, charindex('-', reverse(col)) - 1)
如果值中可能没有连字符,请使用case:
select (case when col like '%-%'
then right(col, charindex('-', reverse(col)) - 1)
else col
end)
【解决方案2】:
最好检查字符串中是否存在连字符,避免出现以下错误:
传递给正确函数的长度参数无效。
SELECT CASE WHEN Col like '%\%' THEN RIGHT(Col,CHARINDEX('\',REVERSE(Col))-1) ELSE '' END AS ColName