首页 米可游戏攻略 正文

实用SQL技巧:判断字符串是否为数字的方法

哎,近在玩儿个数据库的小游戏,题目叫“SQL判断是否为数字”,听起来挺高大上的,其实吧,也没那么难,就是有点儿小弯弯绕绕。说白了,就是让你用SQL语句判断数据库里某个字段的值是不是数字,是不是简单得很? 我一开始也这么觉得,结果……哎,还真遇到些坑。 先说说我的游戏环境吧,我用的是MySQL,版本号啥的,我懒得查了,反正能跑就行。...

哎,近在玩儿个数据库的小游戏,题目叫“SQL判断是否为数字”,听起来挺高大上的,其实吧,也没那么难,就是有点儿小弯弯绕绕。说白了,就是让你用SQL语句判断数据库里某个字段的值是不是数字,是不是简单得很? 我一开始也这么觉得,结果……哎,还真遇到些坑。

先说说我的游戏环境吧,我用的是MySQL,版本号啥的,我懒得查了,反正能跑就行。至于下载安装步骤?那更简单了,官网下一个安装包,傻瓜式安装,下一步下一步就完事儿了,比玩儿连连看还简单。

初,我以为这游戏就是直接用个数,比如什么ISNUMERIC()之类的,一查,MySQL好像没有这个数,这就有点儿尴尬了。不过别慌,咱也不是吃素的,咱有办法!

简单粗暴的方法,就是用正则表达式。这玩意儿看着挺吓人,其实也就那么回事儿,就是用一些特殊的字符来匹配字符串。你想判断是不是数字,那就匹配一下-这些数字不就完了?

我的SQL语句大概是这样写的:

sql

SELECT FROM my_table WHERE my_column REGEXP '^[-]+$';

小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区

解释一下:my_table是我的表名,my_column是要判断的字段,REGEXP就是正则表达式匹配操作符,^[-]+$这个正则表达式的意思是:匹配开头(^)到结尾($)之间全是(+$)数字(-)。

是不是很简单?运行一下,符合条件的记录就出来了,完美! 我当时差点就飘了,觉得这游戏太简单了,我赢定了!

但是,人生嘛,总要有点波折。我发现这个方法有个小它只匹配整数,小数点、负号之类的它就不认了。 比如“123.45”这种,它就判定为非数字了。这可不行,我的游戏要求得更全面一些。

于是我又开始琢磨新的方法。想来想去,觉得还是得自己写数,虽然麻烦点儿,但是更灵活。我写了个MySQL数,代码如下:

sql

DELIMITER //

CREATE FUNCTION is_number(str VARCHAR(255))

RETURNS BOOLEAN

DETERMINISTIC

BEGIN

DECLARE isnum BOOLEAN DEFAULT TRUE;

DECLARE i INT DEFAULT 1;

DECLARE char_val CHAR(1);

IF LENGTH(str) = 0 THEN

RETURN FALSE;

END IF;

WHILE i <= LENGTH(str) DO

SET char_val = SUBSTR(str, i, 1);

IF char_val NOT BETWEEN '0' AND '9' AND char_val != '.' AND char_val != '-' THEN

SET isnum = FALSE;

END IF;

SET i = i + 1;

END WHILE;

RETURN isnum;

END //

DELIMITER ;

这个数的核心逻辑就是遍历字符串的每个字符,判断是不是数字、小数点或者负号。如果不是这三种字符,那就认为不是数字。 是不是比正则表达式复杂多了?不过胜在功能全面,小数、负数都能识别。

我用这个数来判断我的数据:

sql

SELECT , is_number(my_column) AS is_numeric FROM my_table;

这样就能把每个字段的值是不是数字都显示出来了,是不是很方便?

为了更清晰地展示这两种方法的对比,我做了个

方法 优点 缺点
正则表达式 简单易懂,写起来快 只能匹配整数,不能处理小数和负数
自定义数 功能全面,可以处理小数和负数 代码比较复杂,写起来费时间

这个“SQL判断是否为数字”的游戏,一开始看着简单,玩儿起来还真有点儿挑战性。 不过,通过尝试不同的方法,我终还是找到了解决问题的办法,感觉很有成就感!

现在,我正考虑扩展一下这个游戏,比如加入一些更复杂的判断条件,例如判断是否为日期、邮箱地址等等。 你觉得还有什么好玩的挑战呢? 或者你有什么更好的方法判断数字? 一起讨论讨论呗!

阅读全文