gpt4 book ai didi

mysql:为什么将 'string' 与 0 进行比较给出了真值?

转载 作者:IT老高 更新时间:2023-10-29 00:15:35 25 4
gpt4 key购买 nike

我正在做一些 MySQL 测试查询,并意识到将字符串列与 0(作为数字)进行比较得到 TRUE!

select 'string' = 0 as res; -- res = 1 (true), UNexpected! why!??!?!

但是,将它与任何其他数字(正数或负数、整数或小数)进行比较,会得到预期的 false(当然除非字符串是将数字表示为字符串)

select 'string' = -12 as res; -- res = 0 (false), expected
select 'string' = 3131.7 as res; -- res = 0 (false), expected
select '-12' = -12 as res; -- res = 1 (true), expected

当然,将字符串与 '0' 作为字符串进行比较,结果为 false,正如预期的那样。

select 'string' = '0' as res; -- res = 0 (false), expected

但为什么 'string' = 0 的结果为真?

这是为什么呢?

最佳答案

MySQL 自动将字符串转换为数字:

SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)

并且不以数字开头的字符串被评估为0:

SELECT 'string' = 0 AS res;  -- res = 1 (true)

当然,当我们尝试将一个字符串与另一个字符串进行比较时,没有任何转换:

SELECT '0string' = 'string' AS res; -- res = 0 (false)

但我们可以强制转换,例如使用 + 运算符:

SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

最后一个查询返回 TRUE,因为我们将字符串 '0string' 与数字 0 相加,因此字符串必须转换为数字,它变为 SELECT 0 + 0 = 'string' 并且然后在与 0 比较之前,字符串“string”再次转换为数字,然后变为 SELECT 0 = 0,为 TRUE。

这也行:

SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

并将返回转换为数字的字符串的总和(在本例中为 1 + 2)。

关于mysql:为什么将 'string' 与 0 进行比较给出了真值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080382/

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