是否可以使用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
更改为其他。
答案 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转换并进行了排序。