簡體   English   中英

oracle:按日期和時間戳排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM