【发布时间】:2021-03-09 22:40:22
【问题描述】:
这不是一个新问题,但适用于 SQL Server 2008 的方法似乎不适用于较新的版本。
我使用了这种方法:
select cast(40835 as datetime)
然后转换为日期 (SQL 2008)
select cast(cast(40835 as datetime) as date)
我尝试了很多方法,但都没有奏效。 有什么想法需要改变吗?
CONVERT(DATETIME, CONVERT(CHAR(8),sm.[scheme_end_date_key] ))AS [scheme_end_date_key]
或
CAST(CAST(sm.[scheme_end_date_key] AS VARCHAR (8)) AS DATETIME) AS [scheme_end_date_key]
然后
CAST(CAST([scheme_end_date_key] AS DATETIME) AS DATE) AS [scheme_end_date_key]
我得到的错误是:
将表达式转换为数据类型日期时间时出现算术溢出错误。
或
操作数类型冲突:日期与 int 不兼容
【问题讨论】:
-
语句
select cast(cast(40835 as datetime) as date)在 SQL Server 2019 中为我工作,它返回 2011-10-21 -
scheme_end_date_key 的数据类型是什么?如果是 char ,请尝试从表中选择强制转换( CAST(CAST(scheme_end_date_key AS int) AS DATETIME) as date)
-
40835代表什么?整数不是日期
-
@Charlieface 它利用了有关 SQL Server 日期/日期时间类型实现的秘密知识,即整数部分表示自 1900 年 1 月 1 日以来的天数。但这不是一个安全的假设,因为它没有记录,并且可能在不同的平台上发生变化。
-
@AlwaysLearning 那么更有弹性的
dateadd(day, 40835, '1900-01-01')有什么问题@
标签: sql-server datetime