如何将混合字段类型列l_st、new_val_name的日期格式改为dd.MM.yyyy HH:MM?
解决方案:调整日期格式为dd.MM.yyyy HH:MM
由于不同数据库的日期格式化语法存在差异,以下针对主流数据库提供适配方案:
Oracle数据库
如果new_val_name是字符串类型,先通过TO_DATE转换为日期,再用TO_CHAR格式化;若字段本身已是DATE类型,可直接使用TO_CHAR:
WITH t1 AS ( SELECT obj_name , attr_name , TO_CHAR(LAG(TO_DATE(new_val_name, '原日期格式')) OVER (PARTITION BY attr_name ORDER BY stamp), 'dd.MM.yyyy HH24:MI') l_st , TO_CHAR(TO_DATE(new_val_name, '原日期格式'), 'dd.MM.yyyy HH24:MI') new_val_name , employee_name, stamp FROM SYS_AU_CHANGE_TYPE_ATTR change WHERE OBJ_ID = :IDEC) SELECT obj_name, attr_name, l_st, new_val_name, employee_name, stamp FROM t1 ORDER BY stamp DESC
提示:将
原日期格式替换为new_val_name当前的日期格式(例如yyyy-MM-dd HH24:MI:SS);若字段本身是DATE类型,去掉TO_DATE(new_val_name, '原日期格式')部分,直接写new_val_name。
MySQL/MariaDB
使用STR_TO_DATE转换字符串为日期,再通过DATE_FORMAT格式化;若字段是DATETIME类型,直接用DATE_FORMAT:
WITH t1 AS ( SELECT obj_name , attr_name , DATE_FORMAT(LAG(STR_TO_DATE(new_val_name, '原日期格式')) OVER (PARTITION BY attr_name ORDER BY stamp), '%d.%m.%Y %H:%i') l_st , DATE_FORMAT(STR_TO_DATE(new_val_name, '原日期格式'), '%d.%m.%Y %H:%i') new_val_name , employee_name, stamp FROM SYS_AU_CHANGE_TYPE_ATTR change WHERE OBJ_ID = :IDEC) SELECT obj_name, attr_name, l_st, new_val_name, employee_name, stamp FROM t1 ORDER BY stamp DESC
提示:替换
原日期格式为当前字段的日期格式(例如%Y-%m-%d %H:%i:%s);若字段是DATETIME类型,去掉STR_TO_DATE(new_val_name, '原日期格式')部分。
PostgreSQL
用TO_TIMESTAMP转换字符串为时间戳,再通过TO_CHAR格式化;若字段是TIMESTAMP类型,直接用TO_CHAR:
WITH t1 AS ( SELECT obj_name , attr_name , TO_CHAR(LAG(TO_TIMESTAMP(new_val_name, '原日期格式')) OVER (PARTITION BY attr_name ORDER BY stamp), 'DD.MM.YYYY HH24:MI') l_st , TO_CHAR(TO_TIMESTAMP(new_val_name, '原日期格式'), 'DD.MM.YYYY HH24:MI') new_val_name , employee_name, stamp FROM SYS_AU_CHANGE_TYPE_ATTR change WHERE OBJ_ID = :IDEC) SELECT obj_name, attr_name, l_st, new_val_name, employee_name, stamp FROM t1 ORDER BY stamp DESC
提示:将
原日期格式替换为当前字段的日期格式(例如YYYY-MM-DD HH24:MI:SS);若字段是TIMESTAMP类型,去掉TO_TIMESTAMP(new_val_name, '原日期格式')部分。
注意事项
- 分组中第一条数据的
l_st会为NULL,格式化后仍保持NULL,不影响报表展示; - 必须确保替换的
原日期格式与new_val_name字段实际存储的格式完全匹配,否则会出现转换错误。
内容的提问来源于stack exchange,提问作者Daria Filippova
相关产品推荐
相关产品推荐

