Вопрос:
Мне нужно СРАВНИТЬ, если строка является хешем MD5 в SQL.
Я нашел эту PHP-функцию:
function isValidMd5($md5)
{
return !empty($md5) && preg_match('/^[a-f0-9]{32}$/', $md5);
}
Поскольку в SQL отсутствует синтаксис {32}, я просто дублирую [a-f0-9] 32 раза:
IF '200ceb26807d6bf99fd6f4f0d1ca54d4' LIKE '[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]'
BEGIN
PRINT 'YES'
END
ELSE
BEGIN
PRINT 'NO'
END
Однако, чтобы избежать возможного столкновения с именем пользователя, состоящим из 32 [a-f], что маловероятно, я хочу сделать подобное сравнение в верхнем регистре.
Но если для целей тестирования я делаю:
IF 'E' COLLATE Latin1_General_CS_AS LIKE ('[a-f0-9]' COLLATE Latin1_General_CS_AS )
BEGIN
PRINT 'yes'
END
ELSE
BEGIN
PRINT 'no'
END
Я понимаю, да, а не нет.
Однако COLLATE Latin1_General_CS_AS должен сделать его чувствительным к регистру ...
Как можно сделать LIKE в этом случае чувствительным к регистру?