2016-06-11 4 views
0

С использованием SQL-скриптов мне нужно проверить значение Comma Separate. Как я могу проверить переменную String?SQL Проверка строковой переменной

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

create table #test 
(col varchar(100)) 

insert into #test values 
('1,2'), 
('1,2,'), 
('1,'), 
('1,2,3,4,5') 


select * from #test 

В приведенном выше запросе, для второго значения - ожидаемый результат 1,2 В приведенном выше запросе, на третье значение - ожидаемый результат 1

+0

Что именно вы подразумеваете под * "validate from SQL" *? Вам нужен SQL, который возвращает все недопустимые значения? Или все действующие? Или дополнительное поле, указывающее, является ли имя действительным или нет? – Heinzi

+0

@Heinzi, я отредактировал мое сообщение с ясным объяснением. – goofyui

ответ

1

Вы можете обновить таблицу, чтобы исправить «оскорбительные» значения.

update #test 
set col = substring(col, 1, len(col) - 1) 
where col not like '%[0-9]' 

Это удалит последний символ, где значение не заканчивается цифрой.

+0

Логика синтаксиса помогает мне. Это решает проблему с данными, я могу настроить ее в соответствии с моими потребностями. Большое спасибо !! – goofyui

+0

Помогите мне в этом размещении: http://stackoverflow.com/questions/37766643/sql-compare-varchar-variable-with-another-varchar-variable – goofyui

1

Вы можете использовать проверочное ограничение. Вам кажется, что-то вроде этого:

alter table t add constraint chk_name as 
    (name like '%,%' and 
    name not like '%,%,%' and 
    name not like '%[^a-zA-Z,]%' 
    ) 

SQL Server не поддерживает регулярные выражения. Это реализует правила:

  • Имя должно иметь запятой
  • Имя не имеет две запятые
  • Имя состоит только из алфавитных символов и запятая

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

+0

Я не могу изменить таблицу. Я должен работать над частью данных. база данных принадлежит третьей стороне. – goofyui

+0

@goofyui. , , Вы можете использовать ту же логику в 'where' или' case'. В вашем вопросе говорится, что вы хотите проверить данные, и это то, что делает ограничение проверки. –

+0

Спасибо, Гордон, не знаю, смог ли я это получить. Я попытался с образцом запроса, он не работал. В исходной публикации я разместил запрос Sample Temp table. Взгляни, пожалуйста. – goofyui

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