昨天测试那边给我提了一个缺陷,大概是这样的:我们做的软件从版本5.1升级到6.0时,某个单据的审核日期格式展示有问题,
原来这个字段值是“2013-8-7 星期三”,升级完了,变成“08 31 2007 12:00AM”这样了。
环境:
1.Myeclipse
2.sqlserver 2005
3.tomcat
4.win7 64位
先有表table,字段DCHECKTIME,类型datetime,升级后要求审核日期字段类型修改为varchar(20)。
这就涉及出现一个问题:字段DCHECKTIME,类型datetime修改为varchar(20)类型时,日期格式就发生了变化。
之前是datetime类型,数据默认给你显示成“2013-8-7 星期三”,当类型改为varchar(20)时,数据库默认给你还原成原始日期格式“08 31 2007 12:00AM”
同时,还涉及到页面列表读取数据,之前是datetime,可以用
CONVERT(data_type(length),data_to_be_converted,style)函数转换,但是升级完了类型变成varchar了,就导致convert()函数转换失败。
解决方案一:
修改升级工具,在表table里新增一列,值等于DCHECKTIME列,类型为datetime
升级后,把新增的列值再赋值给DCHECKTIME列,再删除新增的列。
解决方案二:
(因为测试那边发现缺陷有点晚,升级工具没法修改,所以只好采用第二种方案)
发脚本更新升级的历史数据,同时又不能影响新做的单据数据
update t_table set DCHECKTIME=(case charindex('-',DCHECKTIME)
when null then convert(varchar(20),CAST(DCHECKTIME as datetime),120)
when 0 then convert(varchar(20),CAST(DCHECKTIME as datetime),120)
else DCHECKTIME end )
列表展示的日期数据格式:
yyyy-mm-dd hh:mi:ss