将varchar转换为Datetime

时间:2011-01-13 16:23:59

标签: sql-server sql-server-2008 sql-convert datetime-conversion

为什么以下代码有效:

CAST(DateOfAction AS Date)

但是这段代码没有:

CAST(DateOfAction AS Datetime)

注意:DateOfActionvarchar字段

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

4 个答案:

答案 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也不是语言安全的

this article by Tibor Karaszithis SO question(在评论中)

答案 3 :(得分:0)

除了其他答案指出日期有一些安全的转换,这些转换不适用于日期时间,还有range of date is larger than that for datetime的事实。因此,如果您的日期早于1753年,则无法进行任何格式化/转换。


此外,如果这不是用于将代码转换为在旧服务器上运行,而只是为了获得时间组件,那么如果您的服务器上有date可用,那么您应该{{1这将更好地工作。