-1

我的数据会是这样

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

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

4

2 回答 2

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'
于 2012-04-23T13:41:21.917 回答
0
SELECT SUBSTRING('IPDocument/XR/test_20120409_clearGAC.txt', CHARINDEX('09_','IPDocument/XR/test_20120409_clearGAC.txt')+3, 100)

结果:clearGAC.txt

于 2012-04-23T13:40:26.273 回答