我在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
我收到错误的非有效月份
答案 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; (我在这里使用德国日期格式)。