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

Convert date to month year format and pass it in the query

我有一份 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

更新

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

to_date(fieldname, 'MON-YYYY') 

但是,如果该列用于 Where 子句中,则根本不应进行转换。

——

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

 to_char(to_date(fieldname, 'DD-MM-YYYY'), 'MON-YYYY') 
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 列添加到 table表达式和索引。