考虑我的 mysql 表中的以下行:
id Url Urls
6433 ["https://do.foo/", "https://do.foo/2"]
我需要用 urls
列中的第一个 url
填充 url,只要它是空的。所以我运行了这个查询:
select coalesce(url, '') = '' as `is_true` ,
convert(JSON_EXTRACT(urls, '$[0]'), CHAR) as `extracted`,
case url
when coalesce(url, '') = '' then convert(JSON_EXTRACT(urls, '$[0]'), CHAR)
else '3'
end as `valid_url`
from table_name where id = 6433 ;
结果是:
is_true extracted valid_url
1 "https://do.foo/" 3
提取的 url 是否有任何原因未显示在有效 url 列中?
最佳答案
您的 CASE
表达式不正确。当您编写 CASE column WHEN expression
时,column
中的值将与表达式进行比较,因此在您的情况下,您正在比较 url
(为 NULL
)反对 ''
,但失败了。将 CASE
表达式更改为 CASE WHEN expression
形式,或将 url
更改为 COALESCE(url, '')
和 ''
的表达式。例如:
select coalesce(url, '') = '' as `is_true` ,
convert(JSON_EXTRACT(urls, '$[0]'), CHAR) as `extracted`,
case
when coalesce(url, '') = '' then convert(JSON_EXTRACT(urls, '$[0]'), CHAR)
else '3'
end as `valid_url`
from table_name where id = 6433
或
select coalesce(url, '') = '' as `is_true` ,
convert(JSON_EXTRACT(urls, '$[0]'), CHAR) as `extracted`,
case coalesce(url, '')
when '' then convert(JSON_EXTRACT(urls, '$[0]'), CHAR)
else '3'
end as `valid_url`
from table_name where id = 6433
两种情况下的输出都是:
is_true extracted valid_url
1 "https://do.foo/" "https://do.foo/"
关于Mysql Switch case 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56320355/