2012-04-23 5 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

Что вы ожидаете от результата для каждой записи? –

+0

Какой двигатель DB? –

+0

@TimSchmelter -> Что вы имеете в виду? – kevin

ответ

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 может быть больше, чем длина.

EDIT: Я добавил логику, если вы не знаете, если 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

+0

SubString и тому подобное - какой из них лучше для производительности? – kevin

+0

Зависит от того, что вы хотите. За ваш комментарий вы просто хотите узнать, есть ли какие-либо clearGAC в базе данных. Это правда, LIKE намного лучше. Где подстрока вызывает функцию. – SQLMason

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

Смежные вопросы