首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测值是否为MySQL中的数字

检测值是否为MySQL中的数字
EN

Stack Overflow用户
提问于 2011-02-21 18:44:29
回答 7查看 274K关注 0票数 192

在MySQL查询中,有没有办法检测值是否是数字?比如

代码语言:javascript
复制
SELECT * 
FROM myTable 
WHERE isANumber(col1) = true
EN

回答 7

Stack Overflow用户

发布于 2015-02-17 23:04:30

这个答案类似于Dmitry,但它允许使用小数以及正数和负数。

代码语言:javascript
复制
select * from table where col1 REGEXP '^[[:digit:]]+$'
票数 9
EN

Stack Overflow用户

发布于 2017-08-04 01:23:09

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

代码语言:javascript
复制
CREATE FUNCTION isnumber(inputValue VARCHAR(50))
  RETURNS INT
  BEGIN
    IF (inputValue REGEXP ('^[0-9]+$'))
    THEN
      RETURN 1;
    ELSE
      RETURN 0;
    END IF;
  END;

然后当您查询时

代码语言:javascript
复制
select isnumber('383XXXX') 

--返回0

代码语言:javascript
复制
select isnumber('38333434') 

--返回1

select isnumber(mycol) mycol1,col2,colx from tablex;--将为列mycol1返回1和0

--您可以增强函数以采用小数、科学记数法等...

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

代码语言:javascript
复制
 SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput');

希望这能有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2014-11-01 03:52:59

另一个比我电脑上的REGEXP更快的选择是

代码语言:javascript
复制
SELECT * FROM myTable WHERE col1*0 != col1;

这将选择col1以数值开头的所有行。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5064977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档