Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Oracle中基于时间对列进行排序_Java_Oracle_Datetime_Sorting_Sql Order By - Fatal编程技术网

Java 在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

我正在Oracle中尝试一种不同的排序方式,就像我有三列,即日期、开始时间和结束时间,我需要按照以下方式对列进行排序

如果当前时间介于开始时间和结束时间之间,则该行应位于顶部。否则,应按正常升序排序

现在我的查询是这样的

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
?我的解释是,它是第一句中提到的三个栏目之一。