首页 > 解决方案 > SQL DateAdd 到包含英国和美国格式数据的列

问题描述

我有一列存储日期时间数据。但数据可能是美国格式、英国格式,也可能是一些垃圾数据。事情是我想尝试将 DataAdd 添加到此列。当数据为英国或美国格式时,我将 DateAdd + 1,否则将保留垃圾数据。


之前 ===== 之后

2018 年 1 月 30 日 == 2018 年 1 月 31 日

20.1.18 ==== 21.1.18

不适用 ======= 不适用


方法一:

CASE WHEN ISDATE(MYCOL) = 1 THEN DateAdd(day,1,MYCOL) ELSE MYCOL END

结果:只有美国格式会 +1,英国格式会被忽略


方法二:

CASE WHEN ISDATE(CONVERT(Datetime,MYCOL,4)) = 1 THEN DateAdd(day,1,CONVERT(VARCHAR(30),MYCOL,4)) ELSE MYCOL END

结果:从字符串转换日期和/或时间时转换失败,ISDATE(CONVERT(Datetime,MYCOL,4))因为垃圾数据“N/A”


编辑:

垃圾数据不仅是“N/A”,它可能是任何东西。

标签: sqldatetime

解决方案


这个怎么样:

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

推荐阅读