Sql server 2012 提取sql server中模式1和模式2之间的字符串
列(c1)中的数据:Sql server 2012 提取sql server中模式1和模式2之间的字符串,sql-server-2012,Sql Server 2012,列(c1)中的数据: 一些数据1/由用户/一些其他数据1/somedate1 一些数据2/由用户/一些其他数据2/一些日期2 一些数据3/由用户/一些其他数据3/一些日期3 一些数据4/由用户/一些其他数据4/一些日期 所需输出: 一些其他数据1 一些其他数据2 一些其他数据3 一些其他数据4 我正在寻找这样做的查询 我尝试了以下操作,但没有成功: select col1, substring(col1,charindex('By User/',col1)+len('By User
一些数据1/由用户/一些其他数据1/somedate1
一些数据2/由用户/一些其他数据2/一些日期2
一些数据3/由用户/一些其他数据3/一些日期3
一些数据4/由用户/一些其他数据4/一些日期
所需输出:
一些其他数据1
一些其他数据2
一些其他数据3
一些其他数据4
我正在寻找这样做的查询
我尝试了以下操作,但没有成功:
select col1,
substring(col1,charindex('By User/',col1)+len('By User/'),
charindex('/',col1)-charindex('By User/',col1)-len('By User/'))
from tablename
在应用程序代码中拆分字符串可能更好 但是,如果没有选择,可以使用
LEFT
,因为pattern1是字符串左侧的第一个:
Select col1, LEFT(col1, CHARINDEX('By_User/',col1) -2)
From (values ('some_datadata1/By_User/some_other_other_data1/somedate1')
, ('some_datadata2/By_User/some_other_other_data2/somedate2')
, ('some_datadata3/By_User/some_other_other_data3/somedate3')
, ('some_datadata4/By_User/some_other_other_data4/somedate4')) as string(col1)
如果需要模式3,则第二个CHARINDEX需要开始查找第二个模式的位置:
Select col1, left(col1, CHARINDEX('By_User/',col1) -2)
, SUBSTRING(col1, CHARINDEX('By_User/',col1) + len('By_User/'),
CHARINDEX('/',col1, CHARINDEX('By_User/',col1) + len('By_User/'))
- CHARINDEX('By_User/',col1) - len('By_User/')
)
From (values ('some_datadata1/By_User/some_other_other_data1/somedate1')
, ('some_datadata2/By_User/some_other_other_data2/somedate2')
, ('some_datadata3/By_User/some_other_other_data3/somedate3')
, ('some_datadata4/By_User/some_other_other_data4/somedate4')) as string(col1)
解决方案:从CHARINDEX('/',col,CHARINDEX('/',col))+1,CHARINDEX('/',col,CHARINDEX('/',col,CHARINDEX('By',col))+1-CHARINDEX('/',col,CHARINDEX('By',col col)),其中CHARINDEX('/',col col col CHARINDEX('/',col col col CHARINDEX('By',col col))+1)-CHARINDEX(“/”,col,CHARINDEX('By',col))>0