我有一个带有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
这是返回的错误
msg 241,第16级,状态1,第274行
时失败
转换日期和/或从字符字符串转换时间
两个查询之间的区别在于,当后者转换为日期时,第一个是转换为日期时间的。
在这一点上,我可以通过DateTime选项前进,但是我想知道我缺少什么。
我检查了没有嵌入式空间,所有列都有len(InputDate) = 10
(不包括时间数据(
我选择了不同的值,将它们放在Excel中,并在每行中执行一个日期函数。我希望在1行上获得 #value 。所有的行都起作用。
因此,没有什么比'02/31/2019'发生的愚蠢了。
当简单的日期转换不转换时,日期时间转换如何通过?
我的猜测是您的值包括日期之后的时间戳(基于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;