检查MySQL Query中varchar列中不是数字的行

时间:2013-10-07 17:13:52

标签: mysql sql

在这种类型的设置的完美世界中,我们将有一个只需要数字的整数列;

但是,如果您有一个varchar列,并且想要添加一个WHERE子句,如下所示:

WHERE <value> is NOT a number

实际上,您选择的所有行都包含任何不仅仅是数字的字符。

这是针对MySQL的。

4 个答案:

答案 0 :(得分:4)

试试这个

    SELECT * FROM myTable WHERE concat('',col1 * 1) != col1

demo here

答案 1 :(得分:3)

REGEXPRLIKE是您的朋友:

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