2012-04-23 18 views
-1

串一串我的數據會像如何在SQL

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

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

+0

您對每條記錄的結果是什麼? – 2012-04-23 13:42:36

+0

什麼數據庫引擎? – 2012-04-23 13:43:51

+0

@TimSchmelter - >你是什麼意思? – kevin 2012-04-23 13:45:48

回答

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' 
+0

謝謝它適合我。 :D – kevin 2012-04-23 13:50:53

+0

SubString和類似的 - 哪一個更好的性能? – kevin 2012-04-23 14:11:53

+0

取決於你想要的。根據你的評論,你只是想看看數據庫中是否有clearGAC。這是事實,一個LIKE好得多。子字符串正在調用一個函數。 – SQLMason 2012-04-23 14:13:29

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

結果: clearGAC.txt

+0

謝謝。但我只會知道clearGAC.txt的名稱。不是確切的日期。 – kevin 2012-04-23 13:51:58