我需要COMPARE如果一個字符串是一個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 [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應該區分大小寫...
如何在這種IF區分大小寫的情況下使LIKE變爲大寫?
^是什麼意思?因爲這不適用於我的SQL-Server ... – 2012-02-21 17:05:54
反轉(即,匹配*不是* 0-9a-f的任何字符)。所以它會匹配'z'。另外,我剛剛編輯了我的答案,因爲LIKE模式需要一些小小的調整:現在它已被包裝在'%'匹配中。 – 2012-02-21 17:19:15
啊,現在我明白了。對不起,我的錯,我沒有看到如果改變了開關。是的,從打字員的角度來看,這更聰明。但它仍然有區分大小寫的問題,這是本文的重點。 – 2012-02-21 17:35:20