为什么以下代码有效:
CAST(DateOfAction AS Date)
但这段代码没有:
CAST(DateOfAction AS Datetime)
注意:DateOfAction
是一个varchar
字段
有人可以解释一下并给出正确的代码吗?
为什么以下代码有效:
CAST(DateOfAction AS Date)
但这段代码没有:
CAST(DateOfAction AS Datetime)
注意:DateOfAction
是一个varchar
字段
有人可以解释一下并给出正确的代码吗?
可能是因为您的VARCHAR
字段包含可能转换为 a DATE
(无时间值)的值,但不是 SQL Server CAST 和 CONVERT 支持的任何有效支持格式。
由于您没有提供任何数据样本,我们只能猜测......
查看有关CAST 和 CONVERT的 SQL Server 联机丛书,了解将转换为DATETIME
.
根据您使用
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'
除了其他答案指出 date 有某些安全的转换不适用于 datetime 之外,还有一个事实是date 的范围大于 datetime的范围。因此,如果您的日期早于 1753 年,则任何格式化/转换都不起作用。
另外,如果这不是为了将代码转换为在较旧的服务器上工作,而只是为了获得时间组件,那么如果您date
的服务器上有可用的时间,那么您应该拥有datetime2
,这会更好。