是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如

SELECT * 
FROM myTable 
WHERE isANumber(col1) = true

当前回答

使用UDF(用户定义函数)。

CREATE FUNCTION isnumber(inputValue VARCHAR(50))
  RETURNS INT
  BEGIN
    IF (inputValue REGEXP ('^[0-9]+$'))
    THEN
      RETURN 1;
    ELSE
      RETURN 0;
    END IF;
  END;

那么当你询问时

select isnumber('383XXXX') 

——返回0

select isnumber('38333434') 

——返回1

Select isnumber(mycol) mycol1, col2, colx; ——将为列mycol1返回1和0

-你可以增强功能,采取小数,科学记数法,等等…

使用UDF的优点是可以在“where子句”比较的左侧或右侧使用它。这在发送到数据库之前极大地简化了SQL:

 SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput');

希望这能有所帮助。

其他回答

你可以使用CAST

  SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")

如果你的数据是" test " " test0 " " test1111 " " 111test " " 111 "

选择所有数据类型为简单整型的记录:

SELECT * 
FROM myTable 
WHERE col1 REGEXP '^[0-9]+$';

结果:‘111’

(在正则表达式中,^表示开始,$表示结束)

使用实例选择存在整数或十进制数的所有记录。

SELECT * 
FROM myTable 
WHERE col1 REGEXP '^[0-9]+\\.?[0-9]*$'; - for 123.12

结果:'111'(与上一个示例相同)

最后,要选择number存在的所有记录,使用以下命令:

SELECT * 
FROM myTable 
WHERE col1 REGEXP '[0-9]+';

结果:'test0'和'test1111'和'111test'和'111'

使用UDF(用户定义函数)。

CREATE FUNCTION isnumber(inputValue VARCHAR(50))
  RETURNS INT
  BEGIN
    IF (inputValue REGEXP ('^[0-9]+$'))
    THEN
      RETURN 1;
    ELSE
      RETURN 0;
    END IF;
  END;

那么当你询问时

select isnumber('383XXXX') 

——返回0

select isnumber('38333434') 

——返回1

Select isnumber(mycol) mycol1, col2, colx; ——将为列mycol1返回1和0

-你可以增强功能,采取小数,科学记数法,等等…

使用UDF的优点是可以在“where子句”比较的左侧或右侧使用它。这在发送到数据库之前极大地简化了SQL:

 SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput');

希望这能有所帮助。

仍然缺少这个简单的版本:

SELECT * FROM myTable WHERE `col1` + 0 = `col1`

(加法应该比乘法快)

或者更慢的版本:

SELECT *, 
CASE WHEN `col1` + 0 = `col1` THEN 1 ELSE 0 END AS `IS_NUMERIC` 
FROM `myTable`
HAVING `IS_NUMERIC` = 1

我发现这很有效

if(col1/col1= 1,'number',col1) AS myInfo