我的数据如下所示。我想检索下划线之间的数据。下划线任一侧的数据可以是任何长度。我从具有数千行的表中选择此数据,并且将在整个查询中选择其他数据。任何人都可以帮忙。
列名是d.ThirdPartyRef
2500_NEW_001
我已经使用以下内容从上面字段左侧为另一列选择了数据。
substring(d.ThirdPartyRef, 1, charindex('_', d.ThirdPartyRef)-1) as CarrierCode_DayNumber
由于
答案 0 :(得分:1)
您可以使用ParseName()
Declare @YourTable table (ID int,ThirdPartyRef varchar(500))
Insert Into @YourTable values
(1,'2500_NEW_001'),
(2,'2500_OLD_002')
Select A.*
,Pos1=ParseName(Replace(ThirdPartyRef,'_','.'),3)
,Pos2=ParseName(Replace(ThirdPartyRef,'_','.'),2)
,Pos3=ParseName(Replace(ThirdPartyRef,'_','.'),1)
From @YourTable A
返回
ID ThirdPartyRef Pos1 Pos2 Pos3
1 2500_NEW_001 2500 NEW 001
2 2500_OLD_002 2500 OLD 002
答案 1 :(得分:0)
如果您可以保证这些值只包含两个下划线:
DECLARE @ThirdPartyRef VARCHAR(50)
SET @ThirdPartyRef = '2500_NEW_001'
SELECT @ThirdPartyRef AS Value,
CHARINDEX('_',@ThirdPartyRef) AS FirstUnderscore,
CHARINDEX('_',@ThirdPartyRef,CHARINDEX('_',@ThirdPartyRef)+1) AS SecondUnderscore,
SUBSTRING(@ThirdPartyRef, CHARINDEX('_',@ThirdPartyRef) + 1, CHARINDEX('_',@ThirdPartyRef,CHARINDEX('_',@ThirdPartyRef)+1) - CHARINDEX('_',@ThirdPartyRef) - 1) AS Result
结果:
/------------------------------------------------------------\
| Value | FirstUnderscore | SecondUnderscore | Result |
|--------------+-----------------+------------------+--------|
| 2500_NEW_001 | 5 | 9 | NEW |
\------------------------------------------------------------/
FirstUnderscore
和SecondUnderscore
列就是为了说明解决方案的工作原理。