是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
是否有一种方法来检测一个值在MySQL查询中是否是一个数字?如
SELECT *
FROM myTable
WHERE isANumber(col1) = true
当前回答
仍然缺少这个简单的版本:
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
其他回答
我建议:如果你的搜索很简单,你可以使用'
column*1 = column
' operator interesting:)是工作,并且比varchar/char字段更快
SELECT * FROM myTable WHERE column = 1;
ABC*1 => 0 (NOT EQU **ABC**)
AB15*A => 15 (NOT EQU **AB15**)
15AB => 15 (NOT EQU **15AB**)
15 => 15 (EQUALS TRUE **15**)
SELECT * FROM myTable WHERE sign (col1)!=0
当然sign(0)是0,但是你可以把你的查询限制为…
SELECT * FROM myTable WHERE sign (col1)!=0 or col1=0
更新:这不是100%可靠,因为“1abc”将返回符号 1,但是“ab1c”将返回0…所以这只适用于不以数字开头的文本。
在我的计算机上,另一个似乎比REGEXP更快的替代方法是
SELECT * FROM myTable WHERE col1*0 != col1;
这将选择col1以数值开头的所有行。
如果你的数据是" 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');
希望这能有所帮助。