Sql server 2012 提取sql server中模式1和模式2之间的字符串

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

列(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/'),
         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