【发布时间】:2019-07-02 11:55:55
【问题描述】:
我有一个带有 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 转换?
【问题讨论】:
-
select max(try_convert(date,inputDate)) from gooddates -
检查字段中是否有多余的字符。如果格式为“mm/dd/yyyy”,则不应超过 10 个字符。尝试使用 DATALENGTH,而不是 LEN,因为那样不会给你尾随空格 SELECT * FROM myTable WHERE DATALENGTH(inputDate) > 10
标签: sql sql-server