SQL 服务器 - select 最后一个连字符后所有字符的子字符串
SQL Server - select substring of all characters following last hyphen
我正在使用产品数据库,试图从组合的 ID/color 代码列中提取产品颜色,其中颜色代码始终是列中最后一个连字符后面的字符串。问题是连字符的数量、产品 ID 和颜色代码都可能不同。
这里有四个例子:
ABC123-001
BCD45678-0165
S-XYZ999-M2235
A-S-ABC123-001
本例中的颜色代码为 001
、0165
、M2235
和 001
。将这些 select 放入自己的专栏的最佳方式是什么?
我认为以下内容符合您的要求:
select right(col, charindex('-', reverse(col)) - 1)
如果值中可能没有连字符,则使用 case
:
select (case when col like '%-%'
then right(col, charindex('-', reverse(col)) - 1)
else col
end)
最好检查字符串中是否存在连字符,以避免出现以下错误:
Invalid length parameter passed to the right function.
SELECT CASE WHEN Col like '%\%' THEN RIGHT(Col,CHARINDEX('\',REVERSE(Col))-1) ELSE '' END AS ColName
我正在使用产品数据库,试图从组合的 ID/color 代码列中提取产品颜色,其中颜色代码始终是列中最后一个连字符后面的字符串。问题是连字符的数量、产品 ID 和颜色代码都可能不同。
这里有四个例子:
ABC123-001
BCD45678-0165
S-XYZ999-M2235
A-S-ABC123-001
本例中的颜色代码为 001
、0165
、M2235
和 001
。将这些 select 放入自己的专栏的最佳方式是什么?
我认为以下内容符合您的要求:
select right(col, charindex('-', reverse(col)) - 1)
如果值中可能没有连字符,则使用 case
:
select (case when col like '%-%'
then right(col, charindex('-', reverse(col)) - 1)
else col
end)
最好检查字符串中是否存在连字符,以避免出现以下错误:
Invalid length parameter passed to the right function.
SELECT CASE WHEN Col like '%\%' THEN RIGHT(Col,CHARINDEX('\',REVERSE(Col))-1) ELSE '' END AS ColName