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

Posted

技术标签:

【中文标题】SQL Server - 选择最后一个连字符后所有字符的子字符串【英文标题】:SQL Server - select substring of all characters following last hyphen 【发布时间】:2015-10-17 20:41:56 【问题描述】:

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

这里有四个例子:

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于SQL Server - 选择最后一个连字符后所有字符的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

替换 SQL Server 2008 中的最后一个字符

当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值

使用正则表达式和 Impala SQL 在最后一个 \\ 之后选择字符串

解析 SQL Server 查询而不针对数据库连接执行查询 [重复]

sql 从SQL Server数据库中的字段中删除最后N个字符

如何查看安装的sql server是啥版本