簡體   English   中英

Oracle查詢按月和年顯示數據

[英]Oracle query displays data by month and year

我想按月份和年份顯示數據量。 這是一個按日期顯示數據的示例:

select count(*) from db.trx where trxdate = to_date('2018-04-23','yyyy-mm-dd')

當我嘗試按月份和年份顯示數據量時,沒有查詢結果出現。 查詢有問題嗎?

查詢:

select count(*) from db.trx where trxdate = to_date('2018-04','yyyy-mm')

您需要將該函數應用於trxdate 使用您的邏輯:

SELECT Count(*) 
FROM   olap.trxh2hpdam 
WHERE  To_char(trxdate, 'YYYY-MM') = '2018-04'; 

但是,我強烈建議您使用直接日期比較:

WHERE trxdate >= date '2018-04-01' 
AND 
trxdate < date '2018-05-01'

這將允許數據庫在trxdate上使用索引。

有兩種方法可以完成您想做的事情。 哪種方法適合您取決於您​​的數據庫設計(例如,您創建的索引)。 一種方法可能是這樣的:

SELECT COUNT(*) FROM olap.trxh2hpdam
 WHERE TRUNC(trxdate, 'MONTH') = DATE'2018-04-01';

這會將日期向下舍入到每月的第一天(當然,刪除任何時間部分)。 然后,您只需將其與想要數據的月份的第一天進行比較。 但是,除非您在TRUNC(trxdate, 'MONTH')上有索引,否則這可能不是最好的選擇; 如果將trxdate編入索引,則需要使用:

SELECT COUNT(*) FROM olap.trxh2hpdam
 WHERE trxdate >= DATE'2018-04-01'
   AND trxdate < DATE'2018-05-01';

如果您在查詢中使用的日期應該是動態的而不是靜態的,則Oracle中有許多功能可供您使用(例如ADD_MONTHS() )。

僅供參考,在嘗試按天檢索數據時也沒有理由不使用ANSI日期文字。 我不確定您的原始查詢是獲取特定DATE數據的一個很好的例子,因為Oracle DATE數據類型確實至少包含一個時間:

SELECT COUNT(*) FROM olap.trxh2hpdam
 WHERE trxdate >= DATE'2018-04-23'
   AND trxdate < DATE'2018-04-24';

要么:

SELECT COUNT(*) FROM olap.trxh2hpdam
 WHERE TRUNC(trxdate) = DATE'2018-04-23';

編輯

如果月份和年份是動態的,則可以根據它們建立一個日期(例如TO_DATE('<year>-<month>-01', 'YYYY-MM-DD') ),然后使用以下查詢:

SELECT COUNT(*) FROM olap.trxh2hpdam
 WHERE trxdate >= TO_DATE('<year>-<month>-01', 'YYYY-MM-DD')
   AND trxdate < ADD_MONTHS( TO_DATE('<year>-<month>-01', 'YYYY-MM-DD'), 1 );

希望這可以幫助。

暫無
暫無

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

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