Java 在Oracle中基于时间对列进行排序
我正在Oracle中尝试一种不同的排序方式,就像我有三列,即日期、开始时间和结束时间,我需要按照以下方式对列进行排序 如果当前时间介于开始时间和结束时间之间,则该行应位于顶部。否则,应按正常升序排序 现在我的查询是这样的Java 在Oracle中基于时间对列进行排序,java,oracle,datetime,sorting,sql-order-by,Java,Oracle,Datetime,Sorting,Sql Order By,我正在Oracle中尝试一种不同的排序方式,就像我有三列,即日期、开始时间和结束时间,我需要按照以下方式对列进行排序 如果当前时间介于开始时间和结束时间之间,则该行应位于顶部。否则,应按正常升序排序 现在我的查询是这样的 select * from details order by date,start_time 排序时如何考虑当前时间?如果“当前时间”表示“系统日期”,并假设“按正常升序排序”表示“按开始时间升序排序”,则可以执行以下操作 SELECT * FROM details O
select * from details order by date,start_time
排序时如何考虑当前时间?如果“当前时间”表示“系统日期”,并假设“按正常升序排序”表示“按开始时间升序排序”,则可以执行以下操作
SELECT *
FROM details
ORDER BY (CASE WHEN sysdate BETWEEN start_time AND end_time
THEN 1
ELSE 0
END) desc,
start_time asc
如果您是指其他内容,一些示例数据和预期输出肯定会有所帮助。您可能需要将语法调整到Oracle中,但这一概念应该适用
SELECT d.*,
CASE WHEN sysdate BETWEEN Start_Time AND End_Time THEN 0 ELSE 1 END SortKey
FROM Details
ORDER BY SortKey, Date, Start_Time;
基本上,这会创建一个列,根据您的需要对结果进行人工分组。这可能是一项有价值的技术。我喜欢看到排序标准——至少在调试时是这样——所以我把它放在选择列表中。如果您愿意,也可以将其隐藏在ORDER BY子句中。我想到的第一个想法是:
SELECT *
FROM details
ORDER BY ( CASE WHEN date_column BETWEEN start_time AND end_time THEN 0 ELSE 1 END )
, date_column
, start_time;
哎呀,我打字不够快。问题所指的当前时间真的是
SYSDATE
还是current\u DATE
?我的解释是,它是第一句中提到的三个栏目之一。