Вопрос:SQL: Сравните, если строка MD5 хеш?
Мне нужно СРАВНЕНИЕ, если строка является хешем MD5 в SQL.
Я нашел это PHP-функции:
function isValidMd5($md5)
{
return !empty($md5) && preg_match('/^[a-f0-9]{32}$/', $md5);
}
Поскольку SQL не хватает {32} синтаксис, я просто дублировать [а-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 [af], однако маловероятно, я хочу сделать подобное сравнение в верхнем регистре.
Но если для целей тестирования я:
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 в этом случае чувствительным к регистру IF?
В чем смысл ^? Поскольку это не работает с моим SQL-сервером ... –
Инвертировать (т. Е. Сопоставлять любой символ, который * не является * 0-9a-f). Таким образом, он будет соответствовать, например, «z». Кроме того, я только что отредактировал свой ответ, так как шаблон LIKE нуждался в небольшой настройке: теперь он завернут в совпадения «%». –
А теперь я понял. К сожалению, я виноват, я не видел измененного переключения в if. Да, это умнее, с машинисткой перспективы. Но у него все еще есть проблема с чувствительностью к регистру, что является точкой этого сообщения. –