gpt4 book ai didi

MySQL 字符串转换为无符号

转载 作者:行者123 更新时间:2023-11-29 12:54:42 26 4
gpt4 key购买 nike

如果我有一个以数字开头,然后包含非数字字符的字符串,则在 MySQL 中将此字符串转换为整数将转换该字符串的第一部分,并且不会表明它遇到了任何问题!这很烦人。

例如:

SELECT CAST('123' AS UNSIGNED) AS WORKS,
CAST('123J45' AS UNSIGNED) AS SHOULDNT_WORK,
CAST('J123' AS UNSIGNED) AS DOESNT_WORK

返回:

+-------------+---------------+-------------+
| WORKS | SHOULDNT_WORK | DOESNT_WORK |
+-------------+---------------+-------------+
| 123 | 123 | 0 |
+-------------+---------------+-------------+

这对我来说没有任何意义,很明显,123J45不是一个数字,并且肯定不等于 123 。这是我的用例:

我有一个包含(一些格式错误的)邮政编码的字段。可能存在打字错误、数据丢失等情况,但从我的角度来看,这没关系。由于另一个表将邮政编码存储为整数,因此当我连接表时,我需要将字符串邮政编码转换为整数(如果我采用其他方式,则必须用 0 s 填充)。但是,如果由于某种原因有一个条目包含 6023JZ1 ,我绝对不希望将其解释为邮政编码 06023 。我对 6023JZ1 更满意映射到NULL 。不幸的是,IF(CAST(zipcode AS UNSIGNED) <= 0, NULL, CAST(zipcode AS UNSIGNED))由于上面讨论的问题而不起作用。

我该如何控制这个?

最佳答案

使用正则表达式:

select (case when val rlike '[0-9][0-9][0-9][0-9][0-9]' then cast(val as unsigned)
end)

许多人认为 MySQL 在执行此转换时不会自动产生错误,这是一个很好的功能。

关于MySQL 字符串转换为无符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com