2017-10-14 930 views
0

我正在使用Oracle数据库。以下是设备工作时间表的详细信息,始终从上午7:00开始,并于次日上午7:00(共24小时)结束。我需要以相同的方式报告日期明智升序和时间从上午7:00到下午7:00。请告知。Oracle数据按日期和时间排序

WorkDate是Date类型和休息两列的是VARCHAR2类型

CREATE TABLE TT 
(
WorkDate DATE, 
FromTime VARCHAR2(100 BYTE), 
ToTime VARCHAR2(100 BYTE) 

) 

Work date From To 
8/8/2017 7:00 7:25 
8/8/2017 7:25 12:35 
8/8/2017 12:35 21:55 
8/8/2017 21:55 1:30 
8/8/2017 1:30 7:00 
8/9/2017 7:00 7:25 
8/9/2017 7:25 12:35 
8/9/2017 12:35 21:55 
8/9/2017 21:55 1:30 
8/9/2017 1:30 7:00 
+0

这些列是什么类型?你能分享你的桌子的DDL吗? – Mureinik

+0

WorkDate是日期类型,其余部分是varchar2 – Rakesh

+0

如果您使用的是Oracle,为什么使用Microsoft SQL Server标记标记您的问题? –

回答

2

那么唯一的问题是,7:25之后来到12:35在字母表中。您需要改为07:25。使用LPAD这个:

select * 
from mytable 
order by workdate, lpad(fromtime, 5, '0'); 
1

串联日与来自时间,然后转换为日期排序结果集。

select * from tt 
order by to_date(to_char(work_date, 'mm/dd/yyyy') || ' ' || from_date, 'mm/dd/yyyy hh24:mi') 
/

最简单的事情会一直保存在FROM和TO的日期时间,但无疑也有,为什么你的应用程序需要做的事情硬的方式很好的理由。