我有一个问题。为什么将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个数字。
答案 0 :(得分:3)
您的问题来自对SQL Server如何存储日期信息的误解。它不是存储为可读的日期,而是存储为一个整数或一系列整数,供引擎用来计算相关日期,然后以人类友好的方式显示。
您在上面使用的CONVERT
函数创建了您希望看到的日期的文本表示形式,然后将该表示形式转换为整数(也正是您希望看到的)。从日期数据类型的直接转换将显示SQL Server实际用于存储“今天”的整数,但这并不是您所期望的。
Robert Sheldon's blog上有一篇非常不错的文章,如果您有兴趣进一步深入。