需要在SQL

时间:2017-08-31 15:15:19

标签: sql oracle

是否可以使用ORACLE DB中的DATE列按时间对表进行排序

我知道这个问题很愚蠢,但我需要按时间顺序得到结果集,这意味着应该先显示最新的第二个记录。

这是需要按秒排序的列:

COLUMN NAME    DATA_TYPE
ID             NUMBER         
MESSAGE        VARCHAR2(4000)    
CREATED_DATE   DATE

在下面的结果中,最近插入了textB,所以我希望textB首先出现:

1    textA      31-AUG-17
2    textB      31-AUG-17

悲伤部分是我无法将列类型从DATE更改为其他。

3 个答案:

答案 0 :(得分:1)

我正在使用Oracle11g并使用以下测试数据,它可以识别最近插入的数据,即使没有时间。

CREATE TABLE t_date
(id NUMBER,
 message VARCHAR2(10),
 created_date DATE
);

INSERT INTO t_date VALUES
(1,'textA',TO_DATE('08/31/2017','MM/DD/YYYY'));
INSERT INTO t_date VALUES
(2,'textB',TO_DATE('08/31/2017 03:31:15','MM/DD/YYYY HH24:MI:SS'));
INSERT INTO t_date VALUES
(3,'textC',TO_DATE('08/31/2017 01:31:15','MM/DD/YYYY HH24:MI:SS'));
INSERT INTO t_date VALUES
(4,'textD',TO_DATE('08/31/2017','MM/DD/YYYY'));

查询1

SELECT id, 
       message, 
       created_date, 
       TO_CHAR(created_date, 'MM/DD/YYYY HH24:MI:SS') created_datetime
  FROM t_date;

结果1

        ID MESSAGE    CREATED_D CREATED_DATETIME   
---------- ---------- --------- -------------------
         1 textA      31-AUG-17 08/31/2017 00:00:00
         2 textB      31-AUG-17 08/31/2017 03:31:15
         3 textC      31-AUG-17 08/31/2017 01:31:15
         4 textD      31-AUG-17 08/31/2017 00:00:00

查询2

SELECT id, 
       message, 
       created_date, 
       TO_CHAR(created_date, 'MM/DD/YYYY HH24:MI:SS') created_datetime
  FROM t_date;
 ORDER BY created_date DESC;

结果2

        ID MESSAGE    CREATED_D CREATED_DATETIME   
---------- ---------- --------- -------------------
         2 textB      31-AUG-17 08/31/2017 03:31:15
         3 textC      31-AUG-17 08/31/2017 01:31:15
         4 textD      31-AUG-17 08/31/2017 00:00:00
         1 textA      31-AUG-17 08/31/2017 00:00:00

看到id 1和4没有确切的时间,但在查询2中按降序排序。因此,如果插入所有记录并且created_date没有确切的时间戳,那么ORDER BY DESC就足以满足您的要求

答案 1 :(得分:0)

在Oracle中,CREATED_DATE DATE列已将信息包含到第二列。您所需要的只是按该列排序:

SELECT * 
FROM tbl 
ORDER BY CREATE_DATE DESC

答案 2 :(得分:-3)

我找到了一个解决方案,通过使用以下方式为我工作。

select id
,MESSAGE
,CREATED_DATE
,to_char(CREATED_DATE,'mm/dd/yyyy hh24:mi:ss') date_with_time 
from table_name
order by date_with_time desc;

我使用to_char转换并进行了排序。