Меня на самом деле спросили это самого несколько недель назад, тогда как я знаю точно, как сделать это с SP или UDF, но я задавался вопросом, был ли быстрый и простой способ сделать это без этих методов. Я предполагаю, что существует, и я просто не могу найти его.
Мнение, которое я должен высказать, - то, что, хотя мы знаем то, какие символы позволяются (a-z, A-Z, 0-9) мы не хотим указывать то, что не позволяется (# @! $ и т.д....). Кроме того, мы хотим вытянуть строки, которые имеют запрещенные символы так, чтобы это могло быть перечислено пользователю для фиксации (поскольку мы не имеем никакого контроля над входным процессом, мы ничего не можем сделать в той точке).
Я просмотрел ТАК и Google ранее, но не могло найти что-либо, что сделало то, что я хотел. Я видел много примеров, которые могут сказать Вам, если это содержит алфавитно-цифровые символы или не делает, но что-то, что может вытащить апостроф в предложении, которое я не нашел в форме запросов.
Обратите внимание также, что значения могут быть null
или ''
(пустой) в этом varchar
столбец.
Разве это не сработает?
SELECT * FROM TABLE
WHERE COLUMN_NAME LIKE '%[^a-zA-Z0-9]%'
Настройка
use tempdb
create table mytable ( mycol varchar(40) NULL)
insert into mytable VALUES ('abcd')
insert into mytable VALUES ('ABCD')
insert into mytable VALUES ('1234')
insert into mytable VALUES ('efg%^&hji')
insert into mytable VALUES (NULL)
insert into mytable VALUES ('')
insert into mytable VALUES ('apostrophe '' in a sentence')
SELECT * FROM mytable
WHERE mycol LIKE '%[^a-zA-Z0-9]%'
drop table mytable
Результаты
mycol
----------------------------------------
efg%^&hji
apostrophe ' in a sentence
Сервер SQL имеет очень ограниченную поддержку Regex. Вы можете использовать PATINDEX с чем-то вроде этого
PATINDEX('%[a-zA-Z0-9]%',Col)
Взгляните на PATINDEX (Transact-SQL)