sql - SQl 服务器转换为日期失败,日期时间有效
问题描述
我有一个varchar(25)
包含日期值的列的表。典型值为“2017 年 11 月 4 日”。
此查询返回 0 行
select *
from myTable
where isdate(inputDate) = 0
我试图找到一个最大值,使用日期排序。
此查询返回预期结果
;with gooddates as
(
select
medcomfolder, PatientId, PatientBirthday, InputDate
from
myTable
where
isdate(inputDate) = 1
)
select max(convert(datetime, inputDate))
from gooddates
此查询返回错误。
;with gooddates as
(
select
medcomfolder, PatientId, PatientBirthday, InputDate
from
dwhFuData
where
isdate(inputdate) = 1
)
select max(convert(date, inputdate))
from gooddates
这是返回的错误
消息 241,级别 16,状态 1,行 274
从字符串转换日期和/或时间时转换失败
这两个查询之间的区别在于,第一个是转换为 dateTime,而后者是转换为一个日期。
此时,我可以使用 dateTime 选项继续前进,但我想知道我错过了什么。
我检查过没有嵌入空格,并且所有列都有一个 len(InputDate) = 10
(不包括时间数据)
我选择了不同的值,将它们放入 excel 中,并在每一行上做了一个日期函数。我希望在 1 行获得#VALUE。所有行都有效。
所以没有什么像“2019 年 2 月 31 日”这样愚蠢的事情发生。
当简单的日期转换不通过时,如何通过 dateTime 转换?
解决方案
我的猜测是,您的值包含日期之后的时间戳(基于isdate()
始终为零的事实)。
如果是这样,一个简单的解决方案是使用convert(date, left(inputdate, 10))
. 另一种解决方案使用try_convert()
:
try_convert(date, inputdate)
要找到有问题的值:
select inputdate
from dwhFuData
where try_convert(date, inputdate) is null and inputdate is not null;
推荐阅读
- c# - IBM MQ with C# 如何将消息头更改为 MQHRF
- python - 跳转到另一个类后如何返回主类?
- c# - LINQ:方法“GroupBy”没有重载需要 6 个参数/IGrouping
不包含定义 - machine-learning - 为什么 K-fold 交叉验证会构建 K+1 模型?
- javascript - 图像未显示在 github 页面上
- powershell - 用于获取部分 XML 节点内容的 Powershell 脚本
- c++ - 如何使用 USB 2 最小化延迟
- python - Python - 解析 INI 文本(不是 INI 文件)
- firebase - Crashlytics/Firebase 中的搜索选项,我可以在其中按崩溃名称进行搜索?
- c# - 如何提高二维数组的性能?