如何在SQL中的字符串子串

时间:2012-04-23 13:37:46

标签: sql

我的数据就像那样

IPDocument/XR/test_20120409_clearGAC.txt
IPDocument/XR/test_20120409_clearGAC_05.txt
IPDocument/XR/test_20120409_clearGAC_01.txt

我想从上面提取 clearGAC.txt 。 如何在SQL中使用子字符串?

2 个答案:

答案 0 :(得分:2)

我认为你想要_05和_01 - 问题不明确。

DECLARE @var VARCHAR(250)

DECLARE @table TABLE ( val VARCHAR(250) )
INSERT  INTO @table
        SELECT  'IPDocument/XR/test_20120409_clearGAC_01.txt'
        UNION ALL
        SELECT  'IPDocument/XR/test_20120409_clearGAC_05.txt'
        UNION ALL
        SELECT  'IPDocument/XR/test_20120409_clearGAC.txt' 


SELECT  SUBSTRING(val, CHARINDEX('clearGAC', val), 50),
        SUBSTRING(SUBSTRING(val, CHARINDEX('_', val)+1, 50), CHARINDEX('_', SUBSTRING(val, CHARINDEX('_', val)+1, 50))+1, 50)
FROM    @table

返回:

clearGAC_01.txt
clearGAC_05.txt
clearGAC.txt

CHARDINDEX中的第三个参数可能大于长度。

编辑:如果你不知道clearGAC是否是名字,我添加了逻辑

阅读完评论后,您可能只想要这样:

  

我要传递ClearGAC.txt并查看它是否在数据库中。这个   ClearGAC.txt可以像上面的代码一样命名。

DECLARE @var VARCHAR(250)

DECLARE @table TABLE ( val VARCHAR(250) )
INSERT  INTO @table
        SELECT  'IPDocument/XR/test_20120409_clearGAC_01.txt'
        UNION ALL
        SELECT  'IPDocument/XR/test_20120409_clearGAC_05.txt'
        UNION ALL
        SELECT  'IPDocument/XR/test_20120409_clearGAC.txt' 


SELECT  *
FROM    @table
WHERE   val LIKE '%clearGAC%.txt'

答案 1 :(得分:0)

SELECT SUBSTRING('IPDocument/XR/test_20120409_clearGAC.txt', CHARINDEX('09_','IPDocument/XR/test_20120409_clearGAC.txt')+3, 100)

结果: clearGAC.txt