Mysql Switch案例返回不正确的结果

时间:2019-05-27 05:55:56

标签: mysql

考虑我的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

是否有任何原因导致提取的网址未显示在有效网址列中?

1 个答案:

答案 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

Demo on dbfiddle