Oracle中的日期格式 - 获取特定范围的日期

时间:2016-08-05 06:23:27

标签: oracle date birt spagobi

我在Oracle的数据库中有一个日期表。当我运行查询时,我将日期格式设置为'01 -05-2015'但是当我在BIRT中运行类似的查询时,我将日期格式设置为'01 -MAY-2015 12:00 AM'。如何通过将日期字段的数据类型保持为日期来获取dd / mm / yyy中的日期格式。

这是我数据库的样本。

EQ_DT
05-07-2015
06-06-2015
15-02-2015
19-09-2015
28-12-2015

我的查询也是:

select to_date(to_char(to_date(enquiry_dt,'DD/MM/YYYY'),'DD/MM/YY'),'DD/MM/YY') as q from xxcus.XXACL_SALES_ENQ_DATAMART where to_date(to_char(to_date(enquiry_dt,'DD/MM/YY'),'DD/MM/YY'),'DD/MM/YY')>'21-06-2012' order by q

我收到错误的非有效月份

3 个答案:

答案 0 :(得分:1)

如果enquiry_dt已经是日期列,为什么要尝试将其转换为日期(然后再转换为char并再次更新日期)?

SELECT to_char(enquiry_dt, 'DD/MM/YYYY') AS q
FROM   xxcus.xxacl_sales_enq_datamart
WHERE  enquiry_dt > to_date('21-06-2012', 'dd-mm-yyyy')
ORDER  BY enquiry_dt

答案 1 :(得分:0)

在birt中,将字段放在报表上,将字段类型设置为date。然后在该字段的属性中,转到格式化日期时间,最后指定该字段所需的日期格式。

答案 2 :(得分:0)

我更喜欢总是使用已知的日期格式将传递日期参数用作BIRT的字符串。这适用于报表参数以及DataSet参数。

然后,在查询中,我将这样转换为日期:

with params as
( select to_date(pi_start_date_str, 'DD.MM.YYYY') as start_date_incl,
         to_date(pi_end_date_str, 'DD.MM.YYYY') + 1 as end_date_excl
  from dual
)
select whatever
from my_table, params
where ( my_table.event_date >= params.start_date_incl 
        and
        my_table.end_date < params.start_date_excl
      )

这与一天中的时间无关。 这样,例如选择2016年1月的所有活动,我可以传递查询参数&#39; 01.01.2016&#39;和&#39; 31.01.2016&#39; (我在这里使用德国日期格式)。