考虑我的mysql表中的以下行:
id Url Urls
6433 ["https://do.foo/", "https://do.foo/2"]
我需要使用url
列中的第一个urls
填充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
是否有任何原因导致提取的网址未显示在有效网址列中?
答案 0 :(得分:2)
您的CASE
表达式不正确。当您完成编写CASE column WHEN expression
时,column
中的值将与表达式进行比较,因此,在您的情况下,您将url
(即NULL
)与{ {1}},失败。将您的''
表达式更改为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