gpt4 book ai didi

mysql - 为什么 CAST 函数返回逗号分隔值中的第一个值,而不是零?

转载 作者:行者123 更新时间:2023-11-29 10:52:28 31 4
gpt4 key购买 nike

当我执行以下查询以通过 ID 查找国家/地区名称时,我不小心传递了一个包含逗号分隔值的字符串。

   SELECT * FROM country WHERE id='6,AU,+61'

此查询获取相应的行。

当我尝试使用将此字符串转换为 UNSIGNED 时

  SELECT CAST('6,AU,+61' AS UNSIGNED)

它返回 6,即第一个值。

当我尝试用逗号分隔整数值时(例如:'7,8'),它也返回 7。因此,它在第一个逗号之后没有采用任何值。

如果是 CAST('AU,+61' AS UNSIGNED),它返回零。

'7,8' 不是一个字符串吗,那么为什么它不将其转换为零并取第一个值呢?

最佳答案

MySql 通过从最左边的字符向右查看字符串来将字符串转换为数字。

如果第一个字符是数字,它将向右迭代,直到到达非数字字符并将其转换为数字。如果字符串以非数字字符开头,它将转换为 0。

这就是为什么 CAST('AU,+61' AS UNSIGNED)0
CAST('7,8' AS UNSIGNED)7

但是,上述内容并未在 MySql Cast 引用中具体记录。尽管那里的示例很少,并且有一条特定的行暗示了这种行为:

there are many different strings that may convert to the value 1, such as '1', ' 1', or '1a'.

但是,这可以通过一些简单的测试来验证:

SELECT CAST('a7' as UNSIGNED) as 'col_a7'; -- 0
SELECT CAST('7q6' as UNSIGNED) as 'col_7q6'; -- 7
SELECT CAST(' 7q6' as UNSIGNED) as 'col__7q6'; -- 7
SELECT CAST('1.4' as UNSIGNED) as 'col1.4'; -- 1

我上面的描述可能不太清楚,但这些测试应该可以澄清一些事情。

关于mysql - 为什么 CAST 函数返回逗号分隔值中的第一个值,而不是零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487507/

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