SQL получить строку, которая имеет специальный символ - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь написать запрос, который выбирает только те значения, которые имеют «+» в конце.

Эти значения представляют собой фрагменты текста, которые пользователи выбирают на экране, где им предоставляется список справочных комментариев.Различные специальные символы, которые фрагменты текста могут иметь в конце: «+» или «~» или «|»

Значения хранятся в одном столбце и смешиваются.

Для этой задачи мне нужно только получить комментарии, заканчивающиеся на '+'.

Вот пример сохраненного текста:

    Addendum and/or contract providing additional event details and conditions.+

There are charges for these services.+

Notify Mall Crew of electrical needs for activities.+

Provide and maintain access to the Hotel1 during event.~

Provide and maintain access to the Hotel2 during event.~

Event organizer/sponsor is responsible for cleanup of event area1.|

Event organizer/sponsor is responsible for cleanup of event area2.|

Вот мой запрос(не работает) ничего не возвращает.

SELECT
    COMMENT
FROM 
    PERMIT A
INNER JOIN 
    PROCESS G ON A.CODE = G.CODE 
WHERE  
    RIGHT(COMMENT, 2) = '+'
    AND COMMENT <> ''   

enter image description here

Заранее большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 20 апреля 2019

Так что я не проверял это, оно может содержать опечатки, но основная идея заключается в том, чтобы преобразовать ваш текст в XML и затем использовать инструменты XML для запроса результата.Это гораздо проще, чем пытаться проанализировать строку с динамическим числом строк.

Сначала мы извлекаем строку xml из таблицы, преобразуя все это в строку xml со строками для каждой строки и используя замену вCR LF для создания разделителей:

SET @xmlstr  = 
  SELECT CAST('<file><row>' + REPLACE(COMMENT,CHAR(13)+CHAR(10),'</row><row>') + '</row></file>' AS XML)
  FROM PERMIT A
  INNER JOIN PROCESS G ON A.CODE = G.CODE 

Затем выберите нужные строки из XML

SELECT line.a_row
FROM    @xmlstr.nodes('/file') AS line(a_row)
WHERE right(line.a_row,1) = '+'

Вы можете найти много примеров использования этого трюка (преобразование в xml для помощи в разборе) на этом веб-сайте и в Интернете.

...