0

为什么以下代码有效:

CAST(DateOfAction AS Date)

但这段代码没有:

CAST(DateOfAction AS Datetime)

注意:DateOfAction是一个varchar字段

有人可以解释一下并给出正确的代码吗?

4

4 回答 4

0

可能是因为您的VARCHAR字段包含可能转换为 a DATE(无时间值)的值,但不是 SQL Server CAST 和 CONVERT 支持的任何有效支持格式。

由于您没有提供任何数据样本,我们只能猜测......

查看有关CAST 和 CONVERT的 SQL Server 联机丛书,了解将转换为DATETIME.

于 2011-01-13T16:29:05.597 回答
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'
于 2011-01-13T16:29:51.910 回答
0

除了其他答案指出 date 有某些安全的转换不适用于 datetime 之外,还有一个事实是date 的范围大于 datetime的范围。因此,如果您的日期早于 1753 年,则任何格式化/转换都不起作用。


另外,如果这不是为了将代码转换为在较旧的服务器上工作,而只是为了获得时间组件,那么如果您date的服务器上有可用的时间,那么您应该拥有datetime2,这会更好。

于 2011-01-14T13:19:11.817 回答
0

对于导致日期时间问题的某些值,日期具有“固定”行为。

例如 yyyy-mm-dd 即使 ISO 也不是语言安全的

请参阅Tibor Karaszi 的这篇文章。还有这个 SO 问题(在评论中)

于 2011-01-14T05:24:58.007 回答