将日期转换为月份年份格式并在查询中传递

时间:2019-07-19 12:41:49

标签: sql db2 birt

我有一个BIRT报告,用户将以dd-mm-yyyy格式输入日期,但是我需要将dd-mm-yyyy转换为MON-YYYY格式。

我尝试使用VARCHAR_FORMAT(FIELDNAME,'MON-YYYY'),但是它不起作用。

select …….
where VARCHAR_FORMAT(fieldname,'MON-YYYY') = '2017-05-15'; 

用户将日期截止为 15/05/2017 数据库中该字段的值为2017-05-15 07:30:00.0

2 个答案:

答案 0 :(得分:1)

更新

显然,该列不是字符串,而是日期时间,这意味着转换仅为

to_date(fieldname, 'MON-YYYY') 

但是,如果该列用在Where子句中,则完全不应转换。

-

使用to_date和to_char首先将您的字符串转换为日期,然后再转换为具有正确格式的字符串

 to_char(to_date(fieldname, 'DD-MM-YYYY'), 'MON-YYYY') 

答案 1 :(得分:0)

select *
from table (values
timestamp('2017-05-15-07.30.00')
) t(fieldname)
where
fieldname between to_date('15/05/2017', 'DD/MM/YYYY') and to_date('15/05/2017', 'DD/MM/YYYY') + 1 day
--date(fieldname) = to_date('15/05/2017', 'DD/MM/YYYY')
;

您可以按原样运行。
两种情况都可以,但是要有效地使用第二种情况,必须通过date(fieldname)表达式创建索引(自db2 10.5起),或​​者将generated always列添加到具有相同表达式和索引的表中它。