如何通过SQL动态创建临时字段并在ORDER BY子句中使用该临时字段?

时间:2017-04-12 03:26:36

标签: sql postgresql

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

2 个答案:

答案 0 :(得分:1)

使用coalesce()to_date()

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