如何从列值中获取某些单词

时间:2017-04-07 16:13:14

标签: sql tsql substring

Column A

/Site/Test1/mysite/Do?id=90
/Site/Test2/mysite/Done?id=10
/NewSite/Site/Test3/mysite/Do?id=90
/Site/Test3/mysite/Done?id=1901

我要做的是从每一行获取Test#以及在=之后获取#。

我尝试了以下内容:

Select 
    SUBSTRING(Column A, CHARINDEX('/', Column A, 1) + 7, LEN(Column A)),
    SUBSTRING(Column A, CHARINDEX('=', Column A, 1) + 1, LEN(Column A)), 
    Column A
from
    Table1

我可以在=之后获得#,但如何从每行获取Test#

更新:Test#就是一个例子,它可以是任何东西。可以肯定的是SiteNewSite

更新#2:

更新表:

Column A
/Site/My%20Web%20Site/mysite/Do?id=90
/Site/Test%20It%20Out/mysite/Do?id=101
/Site/Test1/dummy/Done?id=1000
/NewSite/Site/No%20Way/thesite/Do?id=909

结果:

Col1                Col2
My%20Web%20Site     90
Test%20It%20Out     101
Test1               1000
No%20Way            909

2 个答案:

答案 0 :(得分:1)

select 
    Col1 = substring(a
      , charindex('/Site/', a)+6
      , charindex('/', a,(charindex('/Site/', a)+6))-(charindex('/Site/', a)+6)
      ) 
  , Col2 = substring(a
      , charindex('=', a, 1) + 1
      , len(a))
from t

rextester演示:http://rextester.com/DEBB37305

返回:

+-----------------+------+
|      Col1       | Col2 |
+-----------------+------+
| My%20Web%20Site |   90 |
| Test%20It%20Out |  101 |
| Test1           | 1000 |
| No%20Way        |  909 |
+-----------------+------+

答案 1 :(得分:0)

这应该有效:

select SUBSTRING(col,CHARINDEX('Test',col),5)

用一个例子测试它:

select SUBSTRING('/Site/Test1/mysite/Do?id=90',CHARINDEX('Test','/Site/Test1/mysite/Do?id=90'),5)