SQl服务器转换为日期失败,DateTime工作

时间:2019-07-01 19:41:52

标签: sql sql-server

我有一个带有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转换?

1 个答案:

答案 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;