在MySQL中检测值是否是数字
有没有办法检测一个值是否是MySQL查询中的一个数字?
例如, SELECT * FROM myTable WHERE isANumber(col1)=true 
这应该在大多数情况下工作。
 SELECT * FROM myTable WHERE concat('',col1 * 1) = col1 
它不适用于非标准的数字
-  
1e4 -  
1.2e5 -   
123.(十进制) 
您也可以使用正则expression式…它会是这样的:
 SELECT * FROM myTable WHERE col1 REGEXP '^[0-9]+$'; 
参考: http : //dev.mysql.com/doc/refman/5.1/en/regexp.html
如果您的数据是“test”,“test0”,“test1111”,“111test”,“111”
要select数据是简单的int的所有logging:
 SELECT * FROM myTable WHERE col1 REGEXP '^[0-9]+$'; 
结果:'111'
(在正则expression式中,^表示开始,$表示结束)
要select存在整数或十进制数字的所有logging:
 SELECT * FROM myTable WHERE col1 REGEXP '^[0-9]+\\.?[0-9]*$'; - for 123.12 
结果:“111”(与上一个例子相同)
最后,要select号码存在的所有logging,请使用以下命令:
 SELECT * FROM myTable WHERE col1 REGEXP '[0-9]+'; 
结果:'test0'和'test1111'和'111test'和'111'
这个答案类似于德米特里,但它会允许小数以及正数和负数。
 select * from table where col1 REGEXP '^[[:digit:]]+$' 
另一种比我的电脑上的REGEXP更快的方法是
 SELECT * FROM myTable WHERE col1*0 != col1; 
这将selectcol1以数字值开始的所有行。
仍然缺less这个简单的版本:
 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 
我build议:如果你的search很简单,你可以使用`
 column*1 = column 
`运算符有趣:)是工作和比字段varchar / char更快
SELECT * FROM myTable WHERE列* 1 =列;
 ABC*1 => 0 (NOT EQU **ABC**) AB15*A => 15 (NOT EQU **AB15**) 15AB => 15 (NOT EQU **15AB**) 15 => 15 (EQUALS TRUE **15**) 
使用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
从tablex中selectisnumber(mycol)mycol1,col2,colx; – 将为列mycol1返回1和0
– 你可以增强小数,科学记数法等function。
使用UDF的优点是,您可以在“where子句”比较的左侧或右侧使用它。 这在发送到数据库之前大大简化了你的SQL:
  SELECT * from tablex where isnumber(columnX) = isnumber('UnkownUserInput'); 
希望这可以帮助。
这解决了你所有的问题? 因为string不会像数字一样计算
 SELECT * FROM myTable WHERE sign (col1)!=0 
(0)是0,但你可以限制你查询…
 SELECT * FROM myTable WHERE sign (col1)!=0 or col1=0 
你可以使用
CAST
  SELECT * from tbl where col1 = concat(cast(col1 as decimal), "")