MySQL判断数据非数字的方法详解mysql中判断为非数字

我给大家讲一下我在广东期间做的数据库工作。
我当时接了一份工作,客户数据有点乱。
薪资栏里有“底薪3 000.5 ,绩效奖金5 00”之类的东西。
我应该怎么办?
一开始我很困惑,想直接使用ISNUMERIC,但我发现这太不可靠了。
尝试了一下,ISNUMERIC('基本工资3 000.5 ')居然返回1 !你觉得好笑还是不好笑?后来我想,我必须自己写规则来过滤这个。

正则表达式确实有效。
我记得我写了正则表达式^[0-9 ]+(\.[0-9 ]+)?$。
这意味着什么?它表示一个数字,前面是一个数字,后面是一个小数点和一个数字,或者只是一个整数。
我尝试了一下,SQL是这样写的: sql SELECT FROMEmployeesWHEREsalaryNOTREGEXP'^[0-9 ]+(\.[0-9 ]+)?$'
结果是立即的,所有“基本工资3 000.5 ”都已被过滤。
这招确实不错,后来我就熟悉了。

另一种方法是使用 CAST 函数。
我已经完成了这个SQL: sql SELECT CAST(salary AS DECIMAL) FROMEmployees WHERE salary NOT REGEXP '^[0-9 ]+(\.[0-9 ]+)?$'
CAST 将工资转换为 DECIMAL,如果转换失败则返回 NULL。
这个技巧也很有效,但是必须和正则表达式一起使用,否则会出现很多空值,难以检查。

然后我面临着更多邪恶的事情。
比如有一个字段包含了所有的中文数字“三千五百”,如果直接用正则表达式肯定不行。
当时我没办法,只能告诉客户,需要先把数据整理一下,不然数据库里的东西就乱了。

总之,在计算数字时,正则表达式是完全可靠的,也可以使用 CAST 函数。
主要是要结合实际情况。
如果我发现任何非常令人讨厌的数据,我别无选择,只能告诉你:我以前从未接触过这个。

无论如何,我将与您分享我在过去十年中遇到的一些陷阱。
我希望它对你有帮助。

查询不等于某个值的sql语句

数据库中的字段类型不正确。
数字不需要引号,但字符类型必须使用引号。
2 02 3 年7 月,某公司数据库项目错误率高达3 0%。

sql语句 查询 非数字字符

哦,对了,这就是你举的例子。
对于 2 02 2 年的比赛,一个链接将是此 ASCII 转换。
他们提供的是一个 SQL 脚本,用于确定字符串是否包含数字。
DECLARE @position int、@string char(1 5 )、@t_num varchar(5 0)... 看起来很复杂,但确实如此。
cursor_rc 用于从选项卡 2 中选择 t_num 的游标... 打开游标以遍历表中的数据。
while @@fetch_status = 0 ...循环读取。
SET @position = 1 ... 字符串位置从 1 开始。
WHILE @position <= len(@string) ... 循环到字符串末尾。
ASCII(SUBSTRING(@string, @position, 1 )) ... 获取当前位置的字符并将其转换为 ASCII 代码。
@t_num < 4> 5 7 ... 如果 ASCII 码 4 8 -5 7 为 0-9 ,则判断是否为数字。
insert into tab3 (t_num) value (@string) ...如果不是数字,则将整个字符串直接插入到另一个表中。
Break... 跳出内循环。
SET @position = @position + 1 ... 移至下一个字符。
fetch next fromcursor_r into @string ... 获取光标下的下一个数据。
end closecursor_r deallocatecursor_r ... 关闭并释放游标。
所以我想了想,给了5 分,确实有点低了。
不适用。
我之前在 2 02 2 年的一个城市项目中做过类似的事情。
当时,我们也在处理字符串并寻找特定的模式。
我写的代码也是同样的思路,但是用的是C. int ascii = (int)c;就是这样。
查找字符的 ASCII 值。
if (ascii >= 4 8 && ascii <= 5 7 ) …判断范围。
if (!char.IsDigit(c)) ... C 有一个现成的函数。
然后,存储不满足条件的字符串。
大概就是这个逻辑。
他们的 SQL 脚本可能只是想测试他们对游标和字符串操作的理解。
使用 ASCII 代码转换和过滤数字。
这是非常基本的。
后来我意识到,他们扣我分可能是因为他们认为这个任务不难。
也许我有偏见。
不管怎样,核心思想就是扫描一个字符串,逐个字符转换为ASCII,并确定范围。
如果不是数字,请保存。
就是这样。