我有一个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
答案 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
列添加到具有相同表达式和索引的表中它。