sql - 变长子串

标签 sql sql-server sql-server-2012 substring

我有一个表,其中有一列包含如下字符串。

RTSPP_LZ_AEN
RTSPP_LZ_CPS
RTSPP_LZ_HOUSTON
RTSPP_LZ_LCRA
RTSPP_LZ_NORTH
RTSPP_LZ_RAYBN
RTSPP_LZ_SOUTH
RTSPP_LZ_WEST
RTSPP_BTE_CC1 
RTSPP_BTE_PUN1 
RTSPP_BTE_PUN2

我需要获取从第二次出现 _ 到字符串末尾的子字符串,正如您所看到的,子字符串不是固定长度的。第一部分并不总是固定的,它可以改变。截至目前,我正在使用以下代码来实现它。

SELECT SUBSTRING([String],CHARINDEX('_',[String],(CHARINDEX('_',[String])+1))+1,100)
FROM [Table]

如您所见,我采用任意大的值作为长度来处理可变长度。有更好的方法吗?

最佳答案

您可以将 CHARINDEXREVERSE 结合使用函数查找最后一次出现的 _,您可以使用 RIGHT从字符串末尾获取指定数量的字符。

SELECT RIGHT([String],CHARINDEX('_',REVERSE([String]),0)-1)

<强> SQLFiddle DEMO

关于sql - 变长子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975150/

相关文章:

php - 为每条记录仅获取mysql中的最新数据

mysql - 根据先前的选择结果优化选择行

SQL根据具有不同条件的两行选择结果

SQL查询读取一定数量的嵌套数据记录

sql-server - sql服务器: Compare varchar type value in where clause doesn't return results

sql - 唯一计数 - SQL

使用 vba 提交多个查询时 MySQL 出错

mysql - 标记文章选择 - 更复杂的情况(由逻辑表达式定义的标记)

sql - 外键到非主键

sql-server-2012 - 清除等待统计信息的安全性如何