在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), "")