我有一个带有列的表,其中包含如下所示的字符串。
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]
如您所见,我采用一个任意大的值作为长度来处理可变长度。有更好的方法吗?
您可以CHARINDEX与REVERSE函数结合使用,找到的最后一次出现_,还可以使用RIGHT从字符串末尾获取指定数量的字符。
CHARINDEX
REVERSE
RIGHT
SELECT RIGHT([String],CHARINDEX('_',REVERSE([String]),0)-1)
SQLFiddle演示