Выберите строковое значение в SQL Server - PullRequest
0 голосов
/ 21 октября 2019

У меня есть эти поля в таблице SQL

[header]nombre=LPP Expreso LD Santiago 2 Descargas-01-10-2007 codigo=ACGRZ target=0 activo=0
[header]nombre=BS.AS / ORAN 01-07-2019 codigo=ACJEX target=0 activo=1 VigenciaDesde=01/07/2019
[header]nombre=ATC Cargas MZA/TUC/SGO.TN.03/03/10 DEV codigo=ACLGO target=0 activo=1 VigenciaD

Как мне сделать запрос, чтобы получить строку: codigo = XXXXXX? Текст codigo всегда находится в другом положении

Ответы [ 2 ]

1 голос
/ 21 октября 2019

SQL Server имеет плохую функциональность обработки строк. Вот почему лучше обрабатывать данные, когда они поступают в базу данных.

Тем не менее, вы можете делать то, что вы хотите. Вот один из методов:

select t.*, left(v1.str, charindex(' ', v1.str + ' ')) as codigo_str
from (values ('[header]nombre=ATC Cargas MZA/TUC/SGO.TN.03/03/10 DEV codigo=ACLGO target=0 activo=1 VigenciaD')) t(str) cross apply
     (values (stuff(t.str, 1, charindex('codigo=', t.str + 'coldigo=') - 1, ''))) v1(str);

Это отсекает строку перед 'codigo='. Затем он использует left(), чтобы взять все до первого пробела.

Использование конкатенации в charindex() делает это безопасным, если 'codigo=' не находится в строке или не сопровождается пробелом.

0 голосов
/ 21 октября 2019

Игра вокруг встроенных функций SQL, CHARINDEX и SUBSTRING. По логике должен работать следующий псевдокод:

  1. Получите индекс, в котором размещено ваше ключевое слово рядом со всей строкой.
  2. Из индекса добавьте число или длину символов, которые вы использовали из вашегоКлючевое слово.
  3. Подстрока всего текста от результата шага № 2 до номера желаемой длины текста. Если ваш текст исправлен, то это будет проще.

См. CHARINDEX и SUBSTRING .

Надеюсь, это поможет.

...