gpt4 book ai didi

mysql - 在 MySQL 中,如何在 JSON_OBJECT 中将 VARCHAR 转换为 UNSIGNED?

转载 作者:行者123 更新时间:2023-12-04 10:54:00 25 4
gpt4 key购买 nike

假设一个有两列的表,AB , 都是 VARCHAR 类型:

|------------|-------------|
| A | B |
|------------|-------------|
| EMPLOYEE | 34 |
|------------|-------------|
| OTHER | mystring |
|------------|-------------|

我想要 B 列作为 JSON_OBJECT。如果 A 列的值为“EMPLOYEE”,我想将 B 列中的值转换为整数。这是该查询的样子:
SELECT A, 
JSON_OBJECT(
'key', IF(A = 'EMPLOYEE', CAST(B AS UNSIGNED), B)
) as B
FROM table

结果:
|------------|----------------------|
| A | B |
|------------|----------------------|
| EMPLOYEE | {"key": "34"} | // Expected {"key": 34} here
|------------|----------------------|
| OTHER | {"key": "mystring"} |
|------------|----------------------|

问题是强制转换在结果 JSON 中将值 34 作为字符串保留,但我希望它作为整数。我已经通过使用 TRUE 确认类型转换实际上正在运行作为条件,但 json 仍然包含一个字符串。

我能够让 Actor 阵容工作的一种方法是添加 WHERE A = 'EMPLOYEE' ,但我不知道为什么如果没有 WHERE 子句,我将无法制作预期的 JSON_OBJECT。我怎样才能让这个 Actor 正常工作?

最佳答案

您查询的问题在于 if()强制其两个分支返回的值具有一致的数据类型;大多数其他表达式也是如此,例如 case ,或类似 coalesce() 的函数, least()/greatest() ,等等。因此,即使您尝试强制使用两种不同的数据类型,也会发生隐式转换。

在您的用例中,一种解决方案是移动 case出了json_object() .这样,两个分支都会返回 json数据类型,其中 if() (或 case )满足于:

select 
a,
case a
when 'EMPLOYEE' then json_object('key', cast(b as unsigned))
else json_object('key', b)
end b
from mytable

Demo on DB Fiddle :

|乙
:------- | :------------------
员工 | {“键”:34}
其他 | {"key": "mystring"}

关于mysql - 在 MySQL 中,如何在 JSON_OBJECT 中将 VARCHAR 转换为 UNSIGNED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326314/

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