SQL选择字符串中两个字符之间的数据

时间:2016-12-08 11:42:22

标签: sql sql-server select substring

我的数据如下所示。我想检索下划线之间的数据。下划线任一侧的数据可以是任何长度。我从具有数千行的表中选择此数据,并且将在整个查询中选择其他数据。任何人都可以帮忙。

列名是d.ThirdPartyRef

2500_NEW_001

我已经使用以下内容从上面字段左侧为另一列选择了数据。

substring(d.ThirdPartyRef, 1, charindex('_', d.ThirdPartyRef)-1) as CarrierCode_DayNumber

由于

2 个答案:

答案 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   |
\------------------------------------------------------------/

FirstUnderscoreSecondUnderscore列就是为了说明解决方案的工作原理。