Sql 如何通过从创建的日期字段提取月份来从查询中提取数据

Sql 如何通过从创建的日期字段提取月份来从查询中提取数据,sql,database,oracle,Sql,Database,Oracle,我有一个表,我想根据创建日期字段的月份值提取数据。怎样才能得到呢? 以下是查询: select * from (table name a) where select extract (month from a.createddate )from table name a 表中包含时间戳类型的字段。如果需要在时间戳列的月份应用筛选器: select * from yourTable where extract (month from yourField) = ... 最简单的方法是使用dat

我有一个表,我想根据创建日期字段的月份值提取数据。怎样才能得到呢? 以下是查询:

select *
from (table name a)
where select extract (month from a.createddate )from table name a 

表中包含时间戳类型的字段。

如果需要在
时间戳列的月份应用筛选器:

select *
from yourTable
where extract (month from yourField) = ...

最简单的方法是使用datepart

SELECT * FROM TABLENAME WHERE DATEPART(mm,CreatedDate) = x
“基于”不够具体。你的实际情况如何?如果您的表非常大,并且您在创建日期列的月份值的基础上进行了大量的选择,那么在该列上添加一个索引以及一个不将函数应用于创建日期的条件会更好

例如,假设您希望所有行的创建日期都在2015年6月。做到这一点的最佳方法是创造条件

...where created_date >= date '2015-06-01' and created_date < date '2015-07-01'
…其中创建日期>=日期“2015-06-01”和创建日期<日期“2015-07-01”
或类似的。可以将日期函数应用到右侧(如果不是2015年6月,而是有一个绑定变量,那么第二次比较可以是添加月份(该日期,1)
),因为这不会阻止在
创建的日期
列上使用索引;但应用于列本身的任何函数都将阻止使用索引,并可能导致性能更差

因此,如果您陈述您试图解决的原始问题,而不是从您当前的解决方案开始,您可能会得到更有用的帮助

 SELECT *
  FROM dual
 WHERE TRUNC (systimestamp, 'MM') = TO_DATE ('20160901', 'YYYYMMDD');
您可以按原样运行它来测试它


将“dual”更改为您的表名,将“systimestamp”更改为您的列名。

尝试
select*从何处提取(从a.createddate开始的月份)=
(假设
a
是您表的物理名称)为相关记录创建一个日期变量,该变量的值为CreateDate字段的年第一天和月第一天。然后查找大于等于该日期且小于该日期加上一个月的记录。这不是Oracle语法