[英]oracle: sort by date and timestamp
我使用union
從三個表中選擇一些數據,然后按日期和時間戳(降序)對它們進行排序:
select reportname as name, convert_to_char(a.date) AS created,
....
from table1
UNION
select reportname as name, convert_to_char(a.date) AS created,
....
from table2
UNION
select reportname as name, convert_to_char(a.date) AS created,
....
from table3
order by created desc;
convert_to_char的實現如下:
create or replace function convert_to_char(myDate date)
RETURN varchar IS
BEGIN
return TO_CHAR(cast (myDate as timestamp) at local, 'YYYY-MM-DD HH24:MI:SS TZH:TZM');
END;
我得到的排序數據的結果如下所示:
created
------------------
2017-04-12 16:07:07 +02:00
2017-04-13 09:00:01 +02:00
2017-04-13 09:00:40 +02:00
2017-04-12 16:06:17 +02:00
2017-04-12 16:08:37 +02:00
2017-04-12 16:07:31 +02:00
2017-04-13 09:00:25 +02:00
2017-04-13 09:00:25 +02:00
2017-04-12 16:09:07 +02:00
2017-04-12 16:08:20 +02:00
2017-04-12 16:08:06 +02:00
2017-04-12 16:06:48 +02:00
但我期望以下排序結果:
created
------------------
2017-04-13 09:00:40 +02:00
2017-04-13 09:00:25 +02:00
2017-04-13 09:00:25 +02:00
2017-04-13 09:00:01 +02:00
2017-04-12 16:09:07 +02:00
2017-04-12 16:08:37 +02:00
2017-04-12 16:08:20 +02:00
2017-04-12 16:08:06 +02:00
2017-04-12 16:07:31 +02:00
2017-04-12 16:07:07 +02:00
2017-04-12 16:06:48 +02:00
2017-04-12 16:06:17 +02:00
任何想法如何獲得預期的排序結果?
先感謝您。
您可以先對它們進行排序,然后選擇
select name, created
from
(select reportname as name, convert_to_char(a.date) AS created, a.date,
....
from table1
UNION
select reportname as name, convert_to_char(a.date) AS created, a.date
....
from table2
UNION
select reportname as name, convert_to_char(a.date) AS created, a.date
....
from table3
order by a.date desc);
嘗試:
select name, convert_to_char(created) from (
select reportname as name, date AS created,
....
from table1
UNION
select reportname as name, date AS created,
....
from table2
UNION
select reportname as name, date AS created,
....
from table3
) t
order by created desc;
首先,您用於UNION查詢的語法是錯誤的。 您只能在第一個SELECT上創建別名。 UNION版本都只選擇具有相同數據類型的字段。
其次,通過在子查詢中進行並集,然后可以直接從中選擇並進行排序。
WITH TotalTable AS (
select reportname as name, convert_to_char(a.date) AS created,
....
from table1
UNION
select reportname, convert_to_char(a.date),
....
from table2
UNION
select reportname, convert_to_char(a.date),
....
from table3)
SELECT reportname, created FROM TotalTable
ORDER BY created DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.