-1

Ниже приведен мой запрос. Это дает мне правильный результат, но мне нужно эффективно запускать его, поскольку он используется для записей 500 тыс. Записей.Как правильно выбрать текст из строки с помощью SQL

DECLARE @DESC_MESSAGE VARCHAR(5000) 
SET @DESC_MESSAGE = '12345 VENKAT was entered ODC ABCD-3' 
SELECT REPLACE(@DESC_MESSAGE,SUBSTRING(@DESC_MESSAGE,1,CHARINDEX('was',@DESC_MESSAGE,3)-1),'') 

Я просто хочу получить текст после слова «было», который может меняться в зависимости от состояния. для ex. Текст может быть как «112233 XYZ был введен ODC ФХЦЧ-3» или «223344 ГАРРИ ушел из ODC AMD-3»

Просьбы предложить эффективный способ для получения такого текста.

ответ

2

я был бы склонен использовать stuff():

select stuff(col, 1, chardindex('was ', col + 'was ') + 4, '') 

+ 'was + в функции charindex() просто не гарантирует отсутствие ошибок, если 'was ' не в тексте.

+0

Спасибо за помощь. Это хорошо помогло. Но в некоторых случаях он может давать нежелательный вывод, когда текст, который он сам содержит «был», или заканчивается «was». Поэтому я исправил запрос. Пожалуйста, проверьте выше ответ. – Shardul

+0

@Shardul. , , Ваш ответ выглядит вполне разумным. –

0

половина Milion строк не настолько огромна ..

, что я могу видеть в вашем вопросе является то, что существует проблема архитектуры,

почему вам нужно разделить колонку, чтобы сделать запрос?

Почему вы не держите колонии разрозненными по происхождению?

в конце концов, вы могли бы иметь еще один столбец, который содержит только текст после того, как «был»

это может быть даже лучше, если строки растут много.

0
select LTRIM(stuff(@DESC_MESSAGE, 1, CHARINDEX(' was', @DESC_MESSAGE + 'was') + 3, '')) 

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

  • Нет связанных вопросов^_^