Nas*_*lla 7 sql amazon-redshift
我有一个嵌套的 JSON 字段,如下所示:
trend
{"trend":0,"abs":0,"per":null}
Run Code Online (Sandbox Code Playgroud)
我想查询并获取里面的值,所以我有一个 case 语句来获取值:
select
(CASE WHEN trend like '%"trend"%' THEN json_extract_path_text(trend, 'trend') ELSE NULL END)::SMALLINT,
(CASE WHEN trend like '%"abs"%' THEN json_extract_path_text(trend, 'abs') ELSE NULL END)::INTEGER,
(CASE WHEN trend like '%"per"%' THEN json_extract_path_text(trend, 'per') ELSE NULL END)::DOUBLE PRECISION
from staging_raw.table
Run Code Online (Sandbox Code Playgroud)
问题出在最后一个字段中per,因为null我已经在 Redshift 中收到此错误消息:
我尝试使用该子句:
(CASE WHEN trend like '%"per"%' and json_extract_path_text(trend, 'per') is not NULL THEN json_extract_path_text(trend, 'per') ELSE NULL END)::DOUBLE PRECISION
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误。如果来源是这样的,如何解决?
我是这样解决这个问题的:
and json_extract_path_text(trend, 'p(CASE WHEN trend like '%"per"%' and json_extract_path_text(trend, 'per') !='' THEN json_extract_path_text(trend, 'per') ELSE NULL END)::DOUBLE PRECISION
er') !=''
Run Code Online (Sandbox Code Playgroud)
这之所以有效,是因为json_extract_path_text(trend, 'per')它不是一个NULL值,而只是一个空值!
| 归档时间: |
|
| 查看次数: |
24062 次 |
| 最近记录: |