gpt4 book ai didi

sql - MariaDB 中 CAST() 和 COALESCE() 的顺序很重要

转载 作者:行者123 更新时间:2023-12-05 03:25:02 24 4
gpt4 key购买 nike

我有一个奇怪的问题:表中的 JSON 列中有一个价格,以下语句给出不同的结果,但它们应该给出相同的结果:

CAST(COALESCE(JSON_EXTRACT(item.price_details, "$.shipping.price"), 0) AS FLOAT) AS shippricecoalfloat

COALESCE(CAST(JSON_EXTRACT(item.price_details, "$.shipping.price") AS FLOAT), 0) AS shippricefloatcoal

为了检查,我还添加了一个 JSON_EXTRACT(item.price_details, "$.shipping.price") AS shippprice

结果:

results

MariaDB 版本:mariadb Ver 15.1 Distrib 10.3.31-MariaDB,适用于使用 readline 5.2 的 debian-linux-gnu (x86_64)

DB Fiddle (I couldn't use the same MariaDB version but it behaves the same anyways apparently)

最佳答案

您使用了错误的 JSON 函数。

JSON_EXTRACT() 返回在该路径中找到的 JSON 对象。这就是为什么在你的 fiddle 中你仍然看到双引号。

您想从特定路径返回标量值。所以,使用 JSON_VALUE()

SELECT
item_id,
JSON_VALUE(price_details, "$.shipping.price") AS shipprice,
CAST(COALESCE(JSON_VALUE(price_details, "$.shipping.price"), '0') AS FLOAT) AS shippricecoalfloat,
COALESCE(CAST(JSON_VALUE(price_details, "$.shipping.price") AS FLOAT), 0) AS shippricefloatcoal
FROM `item`
WHERE order_id = 109517;

此外,数据类型的部分“困惑”是由于您的 JSON 将某些值存储为带双引号的字符串,而另一些则存储为数值。我强烈建议不要在 JSON 中用双引号将数值括起来。

https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=d67fa297a5cc4248a06750d71581c022

  • 添加了额外的表达式来显示如果将 float 与整数合并,而不是将 float 与 float 合并会发生什么

关于sql - MariaDB 中 CAST() 和 COALESCE() 的顺序很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72139436/

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