时间: 2019-02-14
一、问题描述
问题描述
: postgresql数据库表中有个字段order_time, 格式为:yyyymmddhhmmss,长度为14.定义的类型是varchar(14) . 但是有个支付交易日期格式为yyyymmdd hh:mm:ss,开发环境未测试出来, 在生产环境才暴露出来. 当时临时将order_time的字段长度改为20.
二、解决方案
解决方案
:
1. 将支付交易日期格式yyyymmdd hh:mm:ss转为yyyymmddhhmmss.
/**
* 日期格式yyyyMMdd HH:mm:ss改为yyyyMMddHHmmss
* 如果要将日期格式yyyy-MM-dd HH:mm:ss改为yyyyMMddHHmmss 使用正则表达式: "[[\\s-:punct:]]"
* @param dateFormat
* @return
*/
public static String changeDateFormatToNum(String dateFormat) {
return dateFormat.replaceAll("[[\\s:punct:]]","");
}
2. 将order_time字段中yyyymmdd hh:mm:ss存储的数据查找出来, 格式更改为yyyymmddhhmmss.
- 查询order_time字段中yyyymmdd hh:mm:ss存储的数据
select * from 表名 where length(order_time)=17;
- 格式更改为yyyymmddhhmmss
-- 里层replace去除冒号,外层replace去除空格。 (在开发真实验证过)
update 表名 set order_time = replace(replace(order_time,':',''),' ','') where length(order_time)=17;
3. 将order_time字段长度更改为14位.
ALTER TABLE 数据库名.表名 MODIFY COLUMN order_time varchar(14) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单时间' ;
三、实际情况
后记: 由于在生产环境查询order_time长度为17的数据未查询到, 故不需要更改数据, 只需要把字段长度改为14即可