在MySQL查询中,有没有办法检测值是否是数字?比如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
发布于 2015-02-17 23:04:30
这个答案类似于Dmitry,但它允许使用小数以及正数和负数。
select * from table where col1 REGEXP '^[[:digit:]]+$'
发布于 2017-08-04 01:23:09
使用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 from tablex;--将为列mycol1返回1和0
--您可以增强函数以采用小数、科学记数法等...
使用UDF的好处是,您可以在"where子句“比较的左侧或右侧使用它。这极大地简化了发送到数据库之前的SQL:
SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput');
希望这能有所帮助。
发布于 2014-11-01 03:52:59
另一个比我电脑上的REGEXP更快的选择是
SELECT * FROM myTable WHERE col1*0 != col1;
这将选择col1以数值开头的所有行。
https://stackoverflow.com/questions/5064977
复制相似问题