sql - 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”,它可能是任何东西。
解决方案
这个怎么样:
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
推荐阅读
- jscript - 导致警报的标头脚本
- android - Ubuntu 18.04 React Native 运行 Android javax.net.ssl.SSLException
- sql-server - SQL 是 LEFT JOIN 和 WHERE 语句的最佳替代方案?
- ios - 将 UIScrollView 中的内容视图固定到其底部而不是其顶部边缘
- python - 从包含熊猫时间戳的数据框中获取平均值
- python - 每次循环在网络中找到新机器时尝试将主机名写入文件
- ios - Swift 中线程的奇怪问题
- c - 如何实现继承:错误:冲突声明'typedef struct
- c# - 构建通用通信接口
- openedge - 进展开放边缘 - 添加索引