Как проверить разделитель (разделитель данных) между строками данных в SQL Server - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно написать сценарий SQL для проверки разделителя между строками данных в столбце SQL.В этом столбце хранятся строки данных в следующем формате:

ODC-2016-111-824035,ODC-2003-283-125666

Как правило, это должна быть запятая, я хотел проверить, есть ли какие-либо другие неподходящие разделители (разделители), такие как двоеточия (:), полу-двоеточия (;), тире (-, \, /), пробелы и т. д.

Все еще пытаюсь, но пока не могу найти ничего полезного ...

В столбце есть несколько строк данных, и они должны быть разделены только запятой (,), как показано ниже:

ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666

Но иногда есть некоторые неподходящие разделители, такие как двоеточия (:)), точки с запятой (;), тире (-, \, /), пробелы и т. д., например:

ODC-2016-737-733488-ODC-2011-918-286353;ODC-2016-111-824035:ODC-2003-283-125666

1 Ответ

0 голосов
/ 07 июня 2019
  • Академический и простой способ добиться этого - использовать запрос REGEX , синтаксис которого варьируется от базы к базе данных.
  • Более простым (и грубым, если хотите) решением будет использование функции CHARINDEX (или эквивалентной) с вложенными операторами CASE.

Для SQL Server решение на основе регулярных выражений может выглядеть следующим образом

with a as (
    select 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666' phrase
) 
select case count(*) when 0 then 'OK' else 'Special / Undesired character(s) present' end
from a where phrase like '%[,-;]%' -- add all special / undersired characters between []

Решение на основе CHARINDEX будет выглядеть примерно так:

SELECT 
CASE CHARINDEX(',', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
WHEN 0 THEN CASE CHARINDEX('-', 'ODC-2016-737-733488,ODC-2011-918-286353,ODC-2016-111-824035,ODC-2003-283-125666')
            WHEN 0 THEN 'OK'  -- you can nest case to capture other characters if you wish
            ELSE 'TEXT HAS -'            
            END    
ELSE 'TEXT HAS ,'
END 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...