[英]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/21
和09/04/21
. 相反,我得到的結果還包括其他日期,例如09/02/21
或08/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 日的所有數據; 這可能是也可能不是你想要的——你可能一直在努力爭取一天。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.