Ограничение проверки чувствительности к регистру с оператором LIKE с использованием подстановочных знаков диапазона символов

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

create table
(
    FlowerId varchar(7)

    constraint chk_flid_regex 
    check(ActorId like'[A-Z][a-z][A-Z]' collate sql_latin1_general_CP1_CS_AS)
);

Например. Если я даю что-то вроде этого '[AZ][az][AZ]' Только первый [AZ] проверяется сервером. Третий [AZ] не проверен.

Поэтому, если я вставляю значения типа Abc, они вставляются, а на самом деле они не должны вставляться в таблицу. Принимая во внимание, что это не дает никакой ошибки. Он должен принимать только такие символы, как "AbC".

3 ответа

Хотя я не могу объяснить, почему сортировка CS не работает, переключение на двоичное сопоставление, кажется, ведет себя так, как вы ожидаете, по крайней мере в Sql Server 2008:

create table tbl
(
     FlowerId varchar(7)
constraint chk_flid_regex 
check(FlowerId like'[A-Z][a-z][A-Z]' collate Latin1_General_BIN)
);

Sql Fiddle

Вы не можете использовать форму диапазона, вам нужно развернуть все буквы, которые вы хотите использовать:

create table
(
    FlowerId varchar(7)

    constraint chk_flid_regex 
    check(ActorId like'[ABCDEFGHIJKLMNOPQRSTUVWXYZ][abcdefghijklmnopqrstuvwxyz][ABCDEFGHIJKLMNOPQRSTUVWXYZ]' collate sql_latin1_general_CP1_CS_AS)
);

Или переключитесь на двоичное сопоставление. Зачем? Поскольку в большинстве сопоставлений строчные буквы помещаются между заглавными буквами, либо до, либо после их эквивалентов в верхнем регистре. Итак, ассортимент A-Z расширяется как AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ - все, что вы исключили в виде буквы в нижнем регистре z,


(Надеюсь, я правильно понял свой алфавит каждый раз, когда мне приходилось печатать его выше, но вы можете внимательно проверить, чтобы я не пропустил ни одной буквы)

^[A-Z][a-z][A-Z]$

Добавьте якоря, чтобы запретить частичные совпадения.

Другие вопросы по тегам