我有一个表,我想根据创建的日期字段的月份值提取数据。怎么能获得? 这是查询:
select *
from (table name a)
where select extract (month from a.createddate )from table name a
表包含具有时间戳类型的字段。
答案 0 :(得分:0)
如果您需要在timestamp
列的月份应用过滤器:
select *
from yourTable
where extract (month from yourField) = ...
答案 1 :(得分:0)
“基于”不够具体。你的实际情况如何?如果你的表非常大,并且你做了很多选择“基于”创建日期列的月份值,那么你可以在该列上使用索引,并且不应用函数的条件做得更好to created_date。
例如,假设您希望2015年6月所有行都带有created_date。最好的方法是设置条件
...where created_date >= date '2015-06-01' and created_date < date '2015-07-01'
或类似的。可以将日期函数应用到右侧(如果不是2015年6月,您有一个绑定变量,那么第二个比较可能是add_months(that_date, 1)
),因为这不会阻止在您的上使用索引created_date
列;但是应用于列本身的任何函数都会阻止使用索引并导致可能性能更差。
因此,如果您要说明您尝试解决的原始问题,那么您可以获得更多有用的帮助,而不是从当前的解决方案开始。
答案 2 :(得分:0)
SELECT *
FROM dual
WHERE TRUNC (systimestamp, 'MM') = TO_DATE ('20160901', 'YYYYMMDD');
你可以按原样运行它来测试它。
将'dual'更改为您的表名,将'systimestamp'更改为您的列名。
答案 3 :(得分:-3)
最简单的方法是使用datepart。
SELECT * FROM TABLENAME WHERE DATEPART(mm,CreatedDate) = x