日期转换为整数-为什么会出错?

时间:2018-09-06 15:06:22

标签: sql sql-server tsql date type-conversion

我有一个问题。为什么将CAST转换为int无效,而将varchar转换为int则正常?例如

如果我们声明一个变量并运行此查询,它将不起作用,

declare @dateb datetime
set @dateb = getdate()

select cast(@dateb as int)

,而该查询将正常运行。为什么?

select cast(convert(varchar(8),@dateb,112) as int) 
  

日期应为8个数字。

1 个答案:

答案 0 :(得分:3)

您的问题来自对SQL Server如何存储日期信息的误解。它不是存储为可读的日期,而是存储为一个整数或一系列整数,供引擎用来计算相关日期,然后以人类友好的方式显示。

您在上面使用的CONVERT函数创建了您希望看到的日期的文本表示形式,然后将该表示形式转换为整数(也正是您希望看到的)。从日期数据类型的直接转换将显示SQL Server实际用于存储“今天”的整数,但这并不是您所期望的。

Robert Sheldon's blog上有一篇非常不错的文章,如果您有兴趣进一步深入。