有办法的朋友请先看清:一个已经存在多年的SQL2000数据库,本人不想改变数据库任何结构。
问题:数据库的日期是 Decimal 数字型,可以用convert(datetime,rtrim(Date1),120)从数据库转换出来,没有问题。但是,头痛的是操作员没有按规定都填写。。。有些填写了,有些没有填写,而且有些为NULL或者数值0。所有用以上方法转换有错误。
注:如果先不改变读出数据库的数值转换成String类型,就不知道用什么来转换日期了。。。
用d as date ; d=Format(Date1, "yyyy-MM-dd") 转换失败!
用CDate(date1) 转换失败!
用DateValue(date1) 转换失败!
用DateSerial(date1) 先把date1转换成字符串String类型然后转日期 也失败。。。。
哪位有什么好办法?
“有些填写了,有些没有填写,而且有些为NULL或者数值0”
说明你的数据本身就不符合转换成日期的前提条件,没有办法处理的。
Decimal太强了!!
可否这样解决:
1、不超过四位的加后加0101,或前加1900
2、把为null或0的转换为19000101
3、尝试转换为DateTime,
如果以上还不能转换成功·。
可以直接在前台就验证了就可以啊。。
不过向你这种转换是会有问题的,最好是在有日期格式的值如果是没有输入的话就直接给一个默认日期值。
这样是最好的办法。。Ok...
前台用正则去验证,数据库里用触发器去判断吧,插入或者更新之前的时候先判断格式然后看如果能转换过来就转,转不过来就给用户提示格式错误吧
多年前做过类似的转换,基本思路就是:先进行各种条件判断,格式符合要求的直接转换,不符合的(如null,0等)可以赋予一个默认值,比如DateTime.MinValue。