为什么以下代码有效:
CAST(DateOfAction AS Date)
但是这段代码没有:
CAST(DateOfAction AS Datetime)
注意:DateOfAction
是varchar
字段
有人可以解释一下并提供正确的代码吗?
答案 0 :(得分:0)
可能是因为您的VARCHAR
字段包含的值可能会转换为DATE
(没有时间值),但不是SQL Server CAST和CONVERT支持的任何有效支持格式。
由于您没有提供任何数据样本的样本,我们只能猜测.....
检查CAST and CONVERT上的SQL Server联机丛书,了解将转换为DATETIME
的所有支持的有效格式。
答案 1 :(得分:0)
根据您使用的其他信息
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]'
范围内的每个值都可以接受datetime
吗?
SELECT DateOfAction
FROM ResAdm.Action
WHERE cast(DateOfAction as DATE) < '17530101'
答案 2 :(得分:0)
日期对于导致日期时间问题的某些值具有“固定”行为。
例如,即使ISO
,yyyy-mm-dd也不是语言安全的答案 3 :(得分:0)
除了其他答案指出日期有一些安全的转换,这些转换不适用于日期时间,还有range of date is larger than that for datetime的事实。因此,如果您的日期早于1753年,则无法进行任何格式化/转换。
此外,如果这不是用于将代码转换为在旧服务器上运行,而只是为了获得时间组件,那么如果您的服务器上有date
可用,那么您应该{{1这将更好地工作。