[英]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';
您可以使用extract
或to_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
將其顯式轉換為字符串。
您可以使用EXTRACT
從date
獲取month
和year
。 例如
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.