我有一个带有varchar(25)
列的表,其中包含日期值。典型值为'11 / 04/2017'。
此查询返回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级国家/地区1行274消息
从字符串转换日期和/或时间时转换失败
这2个查询之间的区别在于,第一个查询将转换为dateTime,而第二个查询将转换为日期。
在这一点上,我可以使用dateTime选项前进,但是我想知道我缺少什么。
我检查了没有嵌入的空格,并且所有列都具有len(InputDate) = 10
(不包括时间数据)
我选择了不同的值,将它们放在excel中,并在每一行上执行了日期功能。我希望在第1行获得 #VALUE 。所有行都有效。
因此,没有比'02 / 31/2019'更愚蠢的了。
如果没有简单的日期转换,如何通过dateTime转换?
答案 0 :(得分:1)
我的猜测是,您的值包含在日期之后的时间戳记(基于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;