簡體   English   中英

我們如何在Oracle查詢中根據月和年選擇數據

[英]How do we select data based on month and year in oracle query

我做了研究,發現可以在MSQL中使用

SELECT * FROM sales WHERE month(sellDate) = 3 AND YEAR(sellDate) = 2017

但是當我嘗試使用Oracle時,它返回了我

ORA-00904: "YEAR": invalid identifier

我有什么方法可以在oracle查詢中基於月份和年份調用數據?

解決了

非常感謝,我也提出了解決方案

這就是我的方法.. :)

select * from sales where to_char(sell,'MM')='09' AND to_char(sell,'YYYY')='2018';

您可以使用extractto_char ,但是由於它們作用於表列值,因此它們將導致轉換表中的每個值以進行比較,這很浪費,並且會阻止使用該列上的任何索引。

最好將目標年份和月份轉換為與列的數據類型相匹配,然后使用范圍:

SELECT * FROM sales
WHERE sellDate >= date '2017-03-01'
AND sellDate < date '2017-04-01'

或者,如果年份和月份是變量(因此您不能使用日期文字),則可以使用to_date()將年份和月份轉換為日期,並使用add_months()查找下個月的開始,例如:

SELECT * FROM sales
WHERE sellDate >= to_date('2017' || '03', 'YYYYMM')
AND sellDate < add_months(to_date('2017' || '03', 'YYYYMM'), 1)

如果您將年和月以數字而不是字符串的形式傳遞,則可以使用to_char將其顯式轉換為字符串。

您可以使用EXTRACTdate獲取monthyear 例如

SELECT Extract(YEAR
               FROM CURRENT_DATE),
       EXTRACT(MONTH
               FROM CURRENT_DATE)
FROM dual;

它將產生如下結果。

在此處輸入圖片說明

因此,您可以將有問題的查詢重寫如下。

SELECT *
FROM sales
WHERE EXTRACT(MONTH
              FROM sellDate) = 3
  AND Extract(YEAR
              FROM sellDate) = 2017;

您可以在此處查看演示

您可以使用to_char來獲取年/月:

SELECT * FROM dual WHERE to_char(sysdate,'MM') = 8 AND to_char(sysdate,'YYYY') = 2017

嘗試使用提取功能請確保sellDate是日期列,或使用to_date將其更改為日期

SELECT * FROM sales WHERE EXTRACT(MONTH from sellDate) = 3 and EXTRACT(YEAR from sellDate) = 2017;

基本上,在您的結構中輸入此代碼。 希望這可以幫助。

 select * from sales where to_char(sell,'MM')='09' AND to_char(sell,'YYYY')='2018';

暫無
暫無

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

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