SQL Server - 选择最后一个连字符后面的所有字符的子字符串

时间:2015-07-27 15:16:55

标签: sql sql-server substring

我正在使用产品数据库,尝试从组合ID /颜色代码列中提取产品颜色,其中颜色代码始终是列中最后一个连字符后面的字符串。问题是连字符,产品ID和颜色代码的数量都可能不同。

以下是四个例子:

ABC123-001
BCD45678-0165
S-XYZ999-M2235
A-S-ABC123-001

在这种情况下,颜色代码为0010165M2235001。将这些选择到自己的专栏中的最佳方法是什么?

2 个答案:

答案 0 :(得分:23)

我认为以下是您想要的:

select right(col, charindex('-', reverse(col)) - 1)

如果值中没有连字符,请使用case

select (case when col like '%-%'
             then right(col, charindex('-', reverse(col)) - 1)
             else col
        end)

答案 1 :(得分:0)

检查字符串中是否存在连字符是很好的,以避免出现以下错误:

  

传递给右侧函数的长度参数无效。

SELECT CASE WHEN Col like '%\%' THEN RIGHT(Col,CHARINDEX('\',REVERSE(Col))-1) ELSE '' END AS ColName