簡體   English   中英

Oracle SQL:如何修改查詢以僅在特定時間范圍內獲得結果?

[英]Oracle SQL: How to modify query in order to get only results within a certain timeframe?

我在 Oracle SQL Developer 中使用了這個語句

select to_char(time,'DD/MM/YY hh24'),count(column) as xyz from table
where to_char(time,'DD/MM/YY')>= '08/04/21'
and to_char(time,'DD/MM/YY')<= '09/04/21'
and column='xyz'
group by to_char(time,'DD/MM/YY hh24')
order by to_char(time,'DD/MM/YY hh24');

我期望的是一個結果/表格,其中結果按時間升序排序(從 08/04/21 的最早時間開始,到08/04/21的最新時間09/04/21 。我希望只有幾天的條目08/04/2109/04/21 . 相反,我得到的結果還包括其他日期,例如09/02/2108/12/20

如何修改我的查詢?

假設time是數據類型date ,您不想在where子句或order by中對其執行to_char 如所寫,您正在進行字符串比較而不是日期比較,因此您將獲得to_char(time字符串在兩個值之間按字母順序排序的行,而不是日期在兩個日期之間的行。與日期文字進行比較或執行顯式to_date調用你的字符串文字

我的賭注是你真的想要這樣的東西

select trunc(time, 'HH24'),count(column) as xyz 
  from table
 where time >= date '2021-08-04'
   and time <= date '2021-09-04'
   and column='xyz'
 group by trunc(time, 'HH24')
 order by trunc(time, 'HH24');

您正在將本機日期值轉換為字符串(帶有兩位數的年份。),然后比較這些字符串。 字符串“08/12/20”“小於”字符串“09/04/21”。

將您的日期與其他日期進行比較,這比文字更容易:

select to_char(trunc(time, 'HH'), 'DD/MM/YY HH24'), count(column) as xyz
from table
where time >= date '2021-04-08'
and time < date '2021-04-10'
and column='xyz'
group by trunc(time, 'HH')
order by trunc(time, 'HH');

我已經使用trunc()將分鍾和秒部分刪除/歸零,這意味着您可以按該值進行分組和排序; 並在最后一刻轉換為字符串以顯示。

我也將to_char(time,'DD/MM/YY')<= '09/04/21'轉換為time < date '2021-04-10'而不是time < date '2021-04-09'為您的版本包括 9 日的所有數據; 這可能是也可能不是你想要的——你可能一直在努力爭取一天。

db<>小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM