我想抛弃一切后,第二次强调 例如,选择susbtring
R5504572C_TCHC001_171463_PDF
我想获得
R5504572C_TCHC001
在SQL Server查询。我尝试过,并能够得到R5504572C
但我希望得到R5504572C_TCHC001
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString
在此先感谢
我想抛弃一切后,第二次强调 例如,选择susbtring
R5504572C_TCHC001_171463_PDF
我想获得
R5504572C_TCHC001
在SQL Server查询。我尝试过,并能够得到R5504572C
但我希望得到R5504572C_TCHC001
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString
在此先感谢
在这里,你就会明白:
select distinct LEFT(JCFNDFUF2, CHARINDEX('_', JCFNDFUF2, CHARINDEX('_', JCFNDFUF2) + 1) - 1) AS LeftString
你第一次调用CHARINDEX
找到的第一个' _',然后使用该索引+ 1作为下一个电话CHARINDEX
的起始位置。如果你需要找到第五个'_',事情会变得丑陋。 :P
列名是“JCFNDFUF2”,严重吗? :o
只是用起始位置
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2, charindex('_', JCFNDFUF2))+1) - 1) AS LeftString
我要说明的是,如果第二'_'
总是在相同的位置,那么你可以简单地使用:
select distinct left(JCFNDFUF2, 17)
你只有一个例子,但它暗示了一个规范的值的命名方案 - 这样的方案通常会有固定宽度的组件。
编辑:
您也可以使用这个parsename()
,假设没有逗号的成分做:
select distinct parsename(replace(JCFNDFUF2), '_', 4) + parsename(replace(JCFNDFUF2), '_', 3)
非常感谢你,这是正确的答案, – Muhammad 2014-11-14 15:13:23