如何使用Oracle获取日期的年份和月份

6

如何在Oracle中使用where子句获取日期的年份和月份。

我以前使用SQL Server,只需使用YEAR(FIELDNAME)和MONTH(FIELDNAME)即可轻松完成。

我已尝试以下内容:

SELECT * 
FROM myschema.mytablename
WHERE   EXTRACT(YEAR FROM  myDATE)  = 2017

但是它会出现ORA-30076错误。


它连接到Oracle 11g。 - user2597012
1
myDATE 的数据类型是什么? - Bob Jarvis - Слава Україні
4个回答

17

你尝试过使用EXTRACT()函数吗?

SELECT EXTRACT(YEAR FROM DATE '2017-12-01') FROM DUAL;
2017

SELECT EXTRACT(MONTH FROM DATE '2017-12-01') FROM DUAL;
12

我在SQL Fiddle中使用11g尝试了这个操作,它也可以在WHERE子句中工作。

http://sqlfiddle.com/#!4/fb2b09/2

enter image description here


3
我需要将这个加入到我的where子句中,这可行吗? - user2597012
你可以尝试使用SELECT * FROM table_name WHERE some_field_name = EXTRACT(YEAR FROM DATE date_field_name);语句。基本上,EXTRACT函数将从给定的字段名中提取所请求的日期属性。 - JRG
@user2597012请编辑您的问题,包括导致此错误的代码。 - APC
提取函数中使用的字段名称的数据类型是日期吗?如果不是,则在字段名称之前使用DATE。 - JRG
类型是日期,至于代码,我在我的问题中已经提供了使用的查询。 - user2597012

8
SELECT * 
FROM myschema.mytablename
WHERE   TO_CHAR(myDATE, 'YYYY') = '2017';

将日期中的年份部分显式转换为字符,与文字进行比较。用于年份和月份的比较:

SELECT * 
    FROM myschema.mytablename
    WHERE   TO_CHAR(myDATE, 'YYYY') = '2017' AND TO_CHAR(myDate, 'MM') = '07';

1
您的查询应该能够正常工作,但是更好的选择是:
SELECT *
  FROM YOUR_TABLE
  WHERE MY_DATE BETWEEN TO_DATE('01-JAN-2017', 'DD-MON-YYYY')
                    AND TO_DATE('01-JAN-2018', 'DD-MON-YYYY') - INTERVAL '1' SECOND

祝你好运。


0

我使用了EXTRACT()函数,对我来说效果很好。

我将在这里分享查询代码:

SELECT extract(YEAR from s.CREATE_DATE) as YEAR, extract(MONTH from s.CREATE_DATE) as MONTH, s.SALES_PERSON_GID, COUNT(s.SALES_ORDER_ID) as "TOTAL ORDERS" FROM SALES_ORDERS s, SALES_ORDER_STATUS ss WHERE s.SALES_ORDER_ID = ss.SALES_ORDER_ID and ss.STATUS_TYPE_ID = 'SALE ORDER STATUS' and ss.STATUS_VALUE_GID = 'SALE ORDER STATUS_DELIVERED' GROUP BY  s.SALES_PERSON_GID,s.CREATE_DATE

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接