date | raw_date
NULL | 01/01/2016
2016-09-13 13:00:00+00 | 01/02/2016
2016-09-13 13:00:00+00 | NULL
有没有办法创建一个新的临时字段:date_temp w / c如果不为null则使用date的值,如果date为null则使用raw_date的值,并在ORDER BY子句中使用date_temp字段。使用上面的示例,结果应如下所示:
date_temp
2016-01-01 12:00:00+00
2016-09-13 13:00:00+00
2016-09-13 13:00:00+00
答案 0 :(得分:1)
with my_table(date, raw_date) as (
values
(NULL::date, '01/01/2016'),
('2016-09-13 13:00:00+00', '01/02/2016'),
('2016-09-13 13:00:00+00', NULL)
)
select coalesce(date, to_date(raw_date, 'DD/MM/YYYY')) as date_temp
from my_table
order by 1;
date_temp
------------
2016-01-01
2016-09-13
2016-09-13
(3 rows)
答案 1 :(得分:0)
您应该可以使用COALESCE(date, to_date(raw_date,'MM/DD/YYYY'))
我假设你的_raw_date_列只是文本/字符串数据类型。您需要先将其强制转换为日期才能使用合并。如果您要在该列中获得一系列格式变体,则需要添加其他逻辑。
REF:(https://www.postgresql.org/docs/8.1/static/functions-conditional.html)