我有一张表保留所有预订的记录。现在,开始日期和结束日期在此表中以以下格式存储:
开始日期:DD / MM / YYYY,例如2011年1月20日20/01/2011
预订截止日期的格式相同。 现在我需要做的是提供一个基于月份的日历,例如nov,oct,jan,没有特定的日期。如果选择了任何选项,则在本月内查询数据库中所有存储日期并将其显示在列表中。
我目前使用的是java preparedStatemetn和Statement。知道如何做到这一点?我面临的最大挑战是使用我现在的格式从用户输入中匹配和选择日期。 附:我正在使用Oracle SQL 谢谢,非常感谢。
答案 0 :(得分:3)
如果您的列类型为DATE
,则表示没有格式。但是,如果它是varchar2,您应该能够将其强制转换为日期:
select to_date(start_date,'dd/mm/yyyy') from mytable;
如果您想要2011年10月的所有日期,可以使用:
select * from mytable where trunc(start_date,'MM') = to_date('01/Oct/2011','dd/mm/yyyy');
(假设start_date是类型DATE
)。
答案 1 :(得分:1)
我会在日期栏上使用范围条件:
select * from mytable where start_date >= to_date('01/Oct/2011','dd/mm/yyyy') and start_date < to_date('01/Nov/2011','dd/mm/yyyy')
使用trunc,oracle planner 应该能够选择索引,但是在这里你指定了非修改值的范围。
我假设John Doyle在你的表格中有DATE
格式。如果您正在使用VARCHAR2,则会遇到极端性能问题,因为需要进行全表扫描。如果至少日期格式为yyyy/mm/dd
,则可以使用索引。请考虑更改数据库设计以避免性能问题。