我有一列存储日期时间数据。但是数据可以是美国格式,英国格式,也可以是一些垃圾数据。我想尝试将DataAdd添加到此列。当数据为英国或美国格式时,我将为DateAdd +1,否则将保留垃圾数据。
之前=====之后
1/30/2018 == 1/31/2018
20.1.18 ==== 21.1.18
N / A ======= N / A
方法1:
CASE WHEN ISDATE(MYCOL) = 1 THEN DateAdd(day,1,MYCOL) ELSE MYCOL END
结果:只有美军将+1,英国格式将被忽略
方法2:
CASE WHEN ISDATE(CONVERT(Datetime,MYCOL,4)) = 1 THEN DateAdd(day,1,CONVERT(VARCHAR(30),MYCOL,4)) ELSE MYCOL END
结果:由于垃圾数据“ N / A”,从ISDATE(CONVERT(Datetime,MYCOL,4))
处的字符串转换日期和/或时间时转换失败
已编辑
:垃圾数据不仅会 “ N / A”,可以是任何东西。
答案 0 :(得分:0)
这如何:
CASE WHEN MYCOL = 'N/A' THEN MYCOL
ELSE CASE WHEN ISDATE(CONVERT(Datetime,MYCOL,4)) = 1 THEN DateAdd(day,1,CONVERT(VARCHAR(30),MYCOL,4)) ELSE MYCOL END