我在MySQL中看到有Cast()Convert()函数从值创建整数,但有没有办法检查一个值是否为整数? 像PHP中的is_int()类的东西就是我要找的东西。

===============>>#1 票数:192 已采纳

我假设您要检查字符串值。 一个很好的方法是REGEXP运算符,将字符串与正则表达式匹配。 简单地做

select field from table where field REGEXP '^-?[0-9]+$';

这个速度相当快。 如果您的字段是数字,只需测试

ceil(field) = field

代替。

===============>>#2 票数:13

将其与正则表达式匹配。

参见http://forums.mysql.com/read.php?60,1907,38488#msg-38488 ,如下所述:

Re:MySQL中的IsNumeric()子句?
发布者:kevinclark()
日期:2005年8月8日01:01 PM


我同意。 这是我为MySQL 5创建的一个函数:

CREATE FUNCTION IsNumeric (sIn varchar(1024)) RETURNS tinyint
RETURN sIn REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';


这允许在开头有一个可选的加号/减号,一个可选的小数点和其余的数字。

===============>>#3 票数:10

假设我们的字段包含字母数字字段,其中包含条目

a41q
1458
xwe8
1475
asde
9582
.
.
.
.
.
qe84

并且您希望此db列中的最高数值(在本例中为9582),那么此查询将帮助您

SELECT Max(column_name) from table_name where column_name REGEXP '^[0-9]+$'

===============>>#4 票数:8

假设数据类型为varchar,这是一个简单的解决方案

select * from calender where year > 0

如果年份为数字,则返回true,否则返回false

===============>>#5 票数:6

这也有效:

CAST( coulmn_value AS UNSIGNED ) // will return 0 if not numeric string.

例如

SELECT CAST('a123' AS UNSIGNED) // returns 0
SELECT CAST('123' AS UNSIGNED) // returns 123 i.e. > 0

===============>>#6 票数:4

要检查Mysql中的值是否为Int,我们可以使用以下查询。 此查询将为行提供Int值

SELECT col1 FROM table WHERE concat('',col * 1) = col;

===============>>#7 票数:3

关于什么:

WHERE table.field = "0" or CAST(table.field as SIGNED) != 0

测试数字和证据:

WHERE table.field != "0" and CAST(table.field as SIGNED) = 0

===============>>#8 票数:2

我已尝试使用上面列出的正则表达式,但它们不适用于以下内容:

SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...

上面将返回1TRUE ),意味着对上面的正则表达式测试字符串'12 INCHES',返回TRUE 它看起来像是基于上面使用的正则表达式的数字。 在这种情况下,因为12位于字符串的开头,所以正则表达式将其解释为数字。

以下将返回正确的值(即0 ),因为字符串以字符而不是数字开头

SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...

以上将返回0FALSE ),因为字符串的开头是文本而不是数字。

但是,如果您要处理的数字和字母混合的字符串以数字开头,则无法获得所需的结果。 REGEXP会将字符串解释为有效数字,而实际上并非如此。

===============>>#9 票数:2

我能想到的最好的变量是int是与MySQL的函数CAST()LENGTH()
此方法适用于字符串,整数,双精度/浮点数据类型。

SELECT (LENGTH(CAST(<data> AS UNSIGNED))) = (LENGTH(<data>)) AS is_int

请参阅演示http://sqlfiddle.com/#!9/ff40cd/44

如果列具有单个字符值,则会失败。 如果列的值为'A',则Cast('A'为UNSIGNED)将评估为0,LENGTH(0)将为1. so LENGTH(Cast('A'为UNSIGNED))= LENGTH(0)将评估为1 = 1 => 1

True Waqas Malik完全用于测试那个案子。 补丁是。

SELECT <data>, (LENGTH(CAST(<data> AS UNSIGNED))) = CASE WHEN CAST(<data> AS UNSIGNED) = 0 THEN CAST(<data> AS UNSIGNED) ELSE (LENGTH(<data>)) END AS is_int;

结果

**Query #1**

    SELECT 1, (LENGTH(CAST(1 AS UNSIGNED))) = CASE WHEN CAST(1 AS UNSIGNED) = 0 THEN CAST(1 AS UNSIGNED) ELSE (LENGTH(1)) END AS is_int;

| 1   | is_int |
| --- | ------ |
| 1   | 1      |

---
**Query #2**

    SELECT 1.1, (LENGTH(CAST(1 AS UNSIGNED))) = CASE WHEN CAST(1.1 AS UNSIGNED) = 0 THEN CAST(1.1 AS UNSIGNED) ELSE (LENGTH(1.1)) END AS is_int;

| 1.1 | is_int |
| --- | ------ |
| 1.1 | 0      |

---
**Query #3**

    SELECT "1", (LENGTH(CAST("1" AS UNSIGNED))) = CASE WHEN CAST("1" AS UNSIGNED) = 0 THEN CAST("1" AS UNSIGNED) ELSE (LENGTH("1")) END AS is_int;

| 1   | is_int |
| --- | ------ |
| 1   | 1      |

---
**Query #4**

    SELECT "1.1", (LENGTH(CAST("1.1" AS UNSIGNED))) = CASE WHEN CAST("1.1" AS UNSIGNED) = 0 THEN CAST("1.1" AS UNSIGNED) ELSE (LENGTH("1.1")) END AS is_int;

| 1.1 | is_int |
| --- | ------ |
| 1.1 | 0      |

---
**Query #5**

    SELECT "1a", (LENGTH(CAST("1.1" AS UNSIGNED))) = CASE WHEN CAST("1a" AS UNSIGNED) = 0 THEN CAST("1a" AS UNSIGNED) ELSE (LENGTH("1a")) END AS is_int;

| 1a  | is_int |
| --- | ------ |
| 1a  | 0      |

---
**Query #6**

    SELECT "1.1a", (LENGTH(CAST("1.1a" AS UNSIGNED))) = CASE WHEN CAST("1.1a" AS UNSIGNED) = 0 THEN CAST("1.1a" AS UNSIGNED) ELSE (LENGTH("1.1a")) END AS is_int;

| 1.1a | is_int |
| ---- | ------ |
| 1.1a | 0      |

---
**Query #7**

    SELECT "a1", (LENGTH(CAST("1.1a" AS UNSIGNED))) = CASE WHEN CAST("a1" AS UNSIGNED) = 0 THEN CAST("a1" AS UNSIGNED) ELSE (LENGTH("a1")) END AS is_int;

| a1  | is_int |
| --- | ------ |
| a1  | 0      |

---
**Query #8**

    SELECT "a1.1", (LENGTH(CAST("a1.1" AS UNSIGNED))) = CASE WHEN CAST("a1.1" AS UNSIGNED) = 0 THEN CAST("a1.1" AS UNSIGNED) ELSE (LENGTH("a1.1")) END AS is_int;

| a1.1 | is_int |
| ---- | ------ |
| a1.1 | 0      |

---
**Query #9**

    SELECT "a", (LENGTH(CAST("a" AS UNSIGNED))) = CASE WHEN CAST("a" AS UNSIGNED) = 0 THEN CAST("a" AS UNSIGNED) ELSE (LENGTH("a")) END AS is_int;

| a   | is_int |
| --- | ------ |
| a   | 0      |

看看演示

===============>>#10 票数:0

这适用于VARCHAR,它以数字开头或不是。

WHERE concat('',fieldname * 1) != fieldname 

当你到达更大的NNNNE + - 数字时可能会受到限制

===============>>#11 票数:0

对我来说,唯一有效的是:

CREATE FUNCTION IsNumeric (SIN VARCHAR(1024)) RETURNS TINYINT
RETURN SIN REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';

来自kevinclark所有其他返回无用的东西给我在234jk45612 inches情况下

  ask by Craig Nakamoto translate from so

未解决问题?本站智能推荐:

2回复

检查mysql中是否存在值

我有一个小脚本,用于从csv文件将数据上传到mysql数据库,我想检查csv文件内部的值列表。 CSV档案: PHP文件: 我不想导入此值,只是我想检查是否存在并获取结果。 任何帮助表示赞赏。
3回复

MySQL如何检查值是整数还是字段中的文本

请在我的数据库中有一个类型为text的字段,但是该字段可能包含一些integer数值。 当我从该字段中选择数据时,我应该区分是整数还是文本(仅用于处理像<或>这样的mysql操作),所以我尝试了: 请注意引号 ,以防它不是整数。 但这是行不通的,我认为这很正常,因
2回复

MySQL将整数除以整数并检查是否大于10

http://prntscr.com/30rri1 我如何才能将“杀人除以死亡”划分为每个人,并且看到每个人的划分都超过10? 选择*来自players WHERE DIV(杀/死)> 10 我试过了,但是没有希望。
2回复

检查以确保字段中的所有值都是MySQL中的整数

我有一列当前为浮点数,我需要检查该列中的所有值是否均为整数。 最简单的方法是什么?
1回复

检查mysql表中的值是否在另一个表中?

我在mysql数据库中有两个表。 这些表的结构如下: 表一: 列:id,名称,intableb 表b:列:id,名称 如果表a中的名称是表b中列名称的值的一部分,我想在表a的b列中插入“ true”。 例如,如果表a的列名中有一个名为“ test”的值,而表b的列名中
1回复

检查Java中MySQL DB中是否存在值?

我正在创建一个游戏,当玩家完成他或她的任务时,它会将任务值存储到数据库中。 我现在遇到的问题是编写一个方法,在MySQL表中搜索玩家ID和任务ID,以检查他或她是否已经完成它。 我是Java中数据库编程的新手,所以这是我在其他地方查看一些示例代码所得到的。 } 基本上,我想
3回复

检查mysql表中的列中是否存在值

我有一个名为accountinfo的表,其中有一行名为username。 当我运行register.php时,我想检查用户名是否已经存在于mysql表中。 有人有想法么?
2回复

如何检查mysql行中是否有值?

对不起我的英语不好 我想问一下如何检查行中是否有值? 提前致谢 :)
1回复

如何检查值是否在MySQL枚举中?

我正在尝试编写一个存储过程,如果提供的参数在enum ,则将select true否则将select false 。 这是我目前的尝试: 看来我无法使用通常用于检查项目是否在选项列表中的标准IN语法。 我需要对ENUM类型使用不同的策略吗?
1回复

检查mysql中重复行上是否存在值

我创建一个查询,以从mysql中的重复值中找出唯一的行。 但是我在检查重复的列值中是否还有其他列值时陷入困境。 例如我有一个表用户: 现在要找出我使用group by的任何唯一值,如下所示:- 因此,现在让我说我必须检查这些重复行中是否有任何一个性别为Male,但不能具有nu