2014-11-14 35 views
0

我想抛弃一切后,第二次强调 例如,选择susbtring

R5504572C_TCHC001_171463_PDF

我想获得

R5504572C_TCHC001

在SQL Server查询。我尝试过,并能够得到R5504572C但我希望得到R5504572C_TCHC001

select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString 

在此先感谢

回答

0

在这里,你就会明白:

select distinct LEFT(JCFNDFUF2, CHARINDEX('_', JCFNDFUF2, CHARINDEX('_', JCFNDFUF2) + 1) - 1) AS LeftString 

你第一次调用CHARINDEX找到的第一个' _',然后使用该索引+ 1作为下一个电话CHARINDEX的起始位置。如果你需要找到第五个'_',事情会变得丑陋。 :P

列名是“JCFNDFUF2”,严重吗? :o

+0

非常感谢你,这是正确的答案, – Muhammad 2014-11-14 15:13:23

0

我要说明的是,如果第二'_'总是在相同的位置,那么你可以简单地使用:

select distinct left(JCFNDFUF2, 17) 

你只有一个例子,但它暗示了一个规范的值的命名方案 - 这样的方案通常会有固定宽度的组件。

编辑:

您也可以使用这个parsename(),假设没有逗号的成分做:

select distinct parsename(replace(JCFNDFUF2), '_', 4) + parsename(replace(JCFNDFUF2), '_', 3)