将日期转换为月年格式并在查询中传递
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表达式和索引。
我有一份 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表达式和索引。