一尘不染

可变长度的子串

sql

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

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]

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


阅读 150

收藏
2021-03-10

共1个答案

一尘不染

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

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

SQLFiddle演示

2021-03-10