将varchar转换为Datetime

为什么以下代码有效:
CAST(DateOfAction AS Date)
但是这段代码没有:
CAST(DateOfAction AS Datetime)
注意:
DateOfAction
varchar
字段 有人可以解释这个并给出正确的代码吗?     
已邀请:
可能是因为您的
VARCHAR
字段包含可能转换为
DATE
(无时间值)的值,但不是SQL Server CAST和CONVERT支持的任何有效支持格式。 由于您没有提供任何数据样本的样本,我们只能猜测..... 检查CAST和CONVERT上的SQL Server联机丛书,了解将转换为
DATETIME
的所有支持的有效格式。     
对于导致日期时间问题的某些值,日期具有“固定”行为。 例如,即使ISO,yyyy-mm-dd也不是语言安全的 请参阅Tibor Karaszi的这篇文章。这个问题(在评论中)     
编辑 根据您使用的其他信息
yyyymmdd
格式我只能认为问题出在数据中。 你能试试以下吗? 您认为的每种价值都是?
 SELECT DateOfAction 
 FROM ResAdm.Action 
 WHERE DateOfAction NOT LIKE '[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]'
every9ѭ范围内的每个值都可以接受吗?
SELECT DateOfAction 
FROM ResAdm.Action 
WHERE cast(DateOfAction as DATE) < '17530101'
    
除了其他答案指出日期有一些安全的转换,这些转换不适用于日期时间,还有一个事实是日期的范围大于datetime的范围。因此,如果您的日期早于1753年,则无法进行任何格式化/转换。 此外,如果这不是为了将代码转换为在较旧的服务器上工作,而只是为了获得时间组件,那么如果您的服务器上有
date
,则应该具有
datetime2
,这将更好地工作。     

要回复问题请先登录注册