我需要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