0

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

但是如果你有一个varchar列并且你想添加一个WHERE这样的子句怎么办:

WHERE <value> is NOT a number

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

这是针对 MySQL 的。

4

4 回答 4

4

尝试这个

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

演示在这里

于 2013-10-07T17:39:18.777 回答
3

REGEXP或者RLIKE是你的朋友:

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
于 2013-10-07T17:38:21.517 回答
0

这将以某种方式接近您的目标:

SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]]*$';

由于 Field1 是 VARCHAR,这将选择 Field1 不是全数字的所有行。

如果您有浮点值:

SELECT * FROM MyTable WHERE NOT MyTable.Field1 REGEXP '^[[:digit:]\.]*$';
于 2013-10-07T17:29:38.243 回答
0

您应该能够在 where 子句中使用正则表达式。
以下 mysql 文档链接提供了详细信息: http:
//dev.mysql.com/doc/refman/5.1/en/regexp.html

于 2013-10-07T17:30:09.003 回答