我正在尝试查找名称中包含非字母数字字符的记录。
我以为我可以用REGEXP
来做http://dev.mysql.com/doc/refman/5.1/en/regexp.html
然后我提到了另一个问题
How can I find non-ASCII characters in MySQL?
我发现我可以使用此查询:
SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9]';
但它返回零行。如果我将命令替换为:
SELECT * FROM tableName WHERE columnToCheck REGEXP '[A-Za-z0-9]';
它返回了我所有的行!!。
我尝试了一些基本命令:
SELECT 'justffalnums' REGEXP '[[:alnum:]]'; returns 1
这是正确的但是
SELECT 'justff?alnums ' REGEXP '[[:alnum:]]'; also returns 1
我不明白为什么要回复一个。它应该返回0,因为它有空格,也是'?'
在mysql中是否有任何启用正则表达式的工作?
我正在使用mysql 5.0并尝试使用5.1。
答案 0 :(得分:3)
您需要添加^
(字符串开头)和$
(字符串结尾)以及一个说明要使用的特定数量的字母数的运算符。下面我使用了+
,这意味着一个或多个。
SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+$';
-- only contains alphanumns => 0
SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+';
-- just begins with alphanum => 1
SELECT 'justff?alnums ' REGEXP '[[:alnum:]]+$';
-- just ends with alphanum => 0
答案 1 :(得分:0)
您提供的正则表达式并未说明整个字段必须包含相关字符。您可以在字符集的开头使用否定字符^
。
SELECT 'justff?alnums' REGEXP '[^A-Za-z0-9]'; returns 1
SELECT 'justffalnums' REGEXP '[^A-Za-z0-9]'; returns 0