2016-06-14 3 views
0

Поэтому у меня есть этот столбец MESSAGE на моем LOGS таблицы, которая имеет каждую строку, начиная, как это (ну, по крайней мере, все они начинаются со слова в процентах):Извлечь строку из столбца sql?

Percentage|15/25|1%*1569ms#0ms*C:\Snapshot\Snapshot_15.jpg 

Мне нужно, чтобы выбрать строку

1569ms 

в этом случае. Они всегда идут между * и #. Как я могу это сделать?

SELECT SUBSTRING(MESSAGE, ,) as Duration FROM LOGS 
+0

TBH, я бы выполнил эту операцию только на уровне приложения, а не на слое базы данных. –

+0

Да, я знаю, что это может быть лучше. Но в этом случае мне действительно нужен запрос в моем db –

+1

Какой конкретный тип SQL? Это очень вероятно повлияет на ответ. EDIT: добавьте соответствующий тег для типа SQL к вопросу. – user2366842

ответ

2
SELECT SUBSTRING(MESSAGE, 
      CHARINDEX('*',message)+1, 
      CHARINDEX('#',message)-CHARINDEX('*',message)-1) as Duration 
FROM LOGS 
+0

Спасибо! Он работал: D –

1

Использование указанной ниже запроса SQL для извлечения вывод, указанный вами:

SELECT DISTINCT CASE 
     WHEN NAME IS NOT NULL 
      AND len(NAME) > 40 
      AND (CHARINDEX('#0ms', NAME) - CHARINDEX('|1%*', NAME) - 4) > 0 
      THEN SUBSTRING(NAME, CHARINDEX('|1%*', NAME) + 4, (CHARINDEX('#0ms', NAME) - CHARINDEX('|1%*', NAME) - 4)) 
     ELSE '' 
     END 
FROM dbo.Table_1 

Мы имеем в сборке функцию в SQL, чтобы разбить строку (SUBSTRING()) или принести индекс любого символа в строке (CHARINDEX), поэтому, используя обе функции, мы можем легко определить точный синтаксис согласно нашему требованию.

+0

Возможно, у вас есть другие данные с шаблоном в одном столбце. Поэтому в этом случае он нарушает инструкцию. Я изменил свой ответ, теперь вы можете взять последний скрипт из своего. –

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