在这种类型的设置的完美世界中,我们将有一个只需要数字的整数列;
但是,如果您有一个varchar
列,并且想要添加一个WHERE
子句,如下所示:
WHERE <value> is NOT a number
实际上,您选择的所有行都包含任何不仅仅是数字的字符。
这是针对MySQL的。
答案 0 :(得分:4)
答案 1 :(得分:3)
SELECT * FROM `MyTable` WHERE `Column` RLIKE '^[^0-9]*$';
<强> UPDv1:强>
您可以使用不同的正则表达式来检测负整数:
SELECT
'-2' RLIKE '^[^0-9]*$', -- fails
'-1' RLIKE '-[0-9]'; -- succeeds
例如:
SELECT * FROM `MyTable` WHERE `Column` RLIKE '-[0-9]' OR `Column` RLIKE '^[^0-9]*$';
经过测试:
SELECT
*
FROM
(
SELECT 'abs 12 x' as `Column`
UNION ALL
SELECT 12
UNION ALL
SELECT -2
UNION ALL
SELECT '-x'
) as `sub`
WHERE
`Column` RLIKE '-[0-9]'
OR
`Column` RLIKE '^[^0-9]*$';
输出:
-2
-x
答案 2 :(得分:0)
这会以某种方式接近你的目标:
SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]]*$';
由于Field1是VARCHAR,这将选择Field1不是完全数字的所有行。
如果您有浮点值:
SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]\.]*$';
答案 3 :(得分:0)
您应该能够在where子句中使用正则表达式
以下mysql文档链接提供了详细信息:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html