首页 > 解决方案 > 当日期范围更改为从 01-01-0001 开始时,不会加载 DimDate

问题描述

之前的问题已经解决了,谢谢。但是,我仍然对以下内容有疑问(之前的一部分)。由于 DATETIME 不支持“0001-01-01”,如何将结果转换为 DATE 数据类型?我已经尝试过 DATETIME2 但不起作用,并且 StartDate 需要为“0001-01-01”。任何帮助都会受到高度评价。

声明 @CurrentDate 日期 = '0001-01-01'

SELECT DATEADD(QQ, DATEDIFF(QQ, 0, @CurrentDate), 0) 作为 FirstDayOfQuarter, DATEADD(QQ, DATEDIFF(QQ, -1, @CurrentDate), -1) 作为 LastDayOfQuarter, CONVERT(VARCHAR(10), DATEADD( WEEK, DATEDIFF(WEEK, 0, DATEADD(DAY, (6- DATEPART(DAY, @CurrentDate)), @CurrentDate)),0),120) AS FirstMondayOftheMonth


错误信息:

将日期数据类型转换为日期时间数据类型导致值超出范围。

标签: sqlsql-serversql-server-2017

解决方案


Datetime 数据类型的范围是从 1753 年 1 月 1 日到 9999 年 12 月 31 日。

此处的错误表明您超出了下限或下限。

如果您必须从 0001 存储该值,请改用 Varchar。

在我见过的许多实时项目中,它通常从 1900-01-01 开始,人们将其作为默认的最小日期


推荐阅读