我正在为交易应用程序开发一个oracle数据库。我在选择日期和月份时遇到了这个问题。我确实知道这在PL / SQL中是可以实现的,但是我觉得必须有一种仅使用oracle语句的方法。
根据我的研究,以下声明是从表的每一行中选择月份。
select to_char(sysdate, 'Month') from income
我试图根据自己的需要修改它,但是我失败了。
到目前为止,我已经提出了这个声明,但是它不起作用
select * from income where to_char(sysdate,month) = 'feb'
例如, 我将能够选择“ 2012年5月”,而不是显示所有记录。以前有没有人碰过这个问题?
预先感谢您:)
答案 0 :(得分:1)
您在追寻类似的东西吗?
select *
from income
where <date_column> >= to_date('01/05/2019', 'dd/mm/yyyy')
and <date_column> < to_date('01/06/2019', 'dd/mm/yyyy')
(用您要过滤的收入表中的日期列的名称替换<date_column>
)?
答案 1 :(得分:0)
我认为您可以使用以下查询:
select *
from income
where to_char(<date_column>,'MON-RRRR') = 'MAY-2019';
答案 2 :(得分:0)
如果您想传递诸如'May 2012'
之类的字符串,那么我建议:
select i.*
from income i
where i.datecol >= to_date('May 2012', 'Mon YYYY') and
i.datecol < to_date('May 2012', 'Mon YYYY') + interval '1' month;
也就是说,我认为您的应用程序应该将字符串值转换为日期范围,并且应该在查询中使用该范围:
select i.*
from income i
where i.datecol >= :datestart
i.datecol < :dateend + interval '1 day';
我强烈建议您避免使用between
加上日期,尤其是在Oracle中。 date
数据类型具有内置的时间成分,可能会导致比较失败。