在这种设置的完美世界中,我们将有一个只需要数字的整数列;
但是如果你有一个varchar
列并且你想添加一个WHERE
这样的子句怎么办:
WHERE <value> is NOT a number
本质上,您选择的所有行都包含任何不仅仅是数字的字符。
这是针对 MySQL 的。
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
这将以某种方式接近您的目标:
SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]]*$';
由于 Field1 是 VARCHAR,这将选择 Field1 不是全数字的所有行。
如果您有浮点值:
SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]\.]*$';
您应该能够在 where 子句中使用正则表达式。
以下 mysql 文档链接提供了详细信息: http:
//dev.mysql.com/doc/refman/5.1/en/regexp.html