我发现了日期的整数格式,我也知道日期,但我不知道如何在 TSQL 中获取该日期,而且如果我有日期,我也不知道如何获取整数:
700444 -> 1918-10-02
731573 -> 2003-12-24
739479 -> 2025-08-16
这些 6 位数字适合作为从 0001-01-01 开始的每一天的计数器,我通过获取从接近 2000 年的日期开始一个世纪的天数并将其添加到 1900 来进行检查:
select DATEADD(dd,731573/20,'19000101')
出去:
2000-02-24 00:00:00.000
但我无法运行select DATEADD(dd,731573/20,'10000101')
,这会抛出:
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
Microsoft Learn 表示 TSQL 仅允许从 1753-01-01 开始的日期,请参阅datetime (Transact-SQL) Microsoft Learn,因此:
select DATEADD(dd,731573/20,'17530101')
出去:
1853-02-24 00:00:00.000
不过,我无法将 731573 添加到第一年。然后我发现1/1/1753在SQL Server中有何意义?:
--(正如其中一个答案和为什么你应该总是写“varchar”,其长度放在括号中?通常,如果不这样做,您会得到正确的结果 - DBA SE,varchar(length)
而不是仅仅varchar
)--
选择 CONVERT(VARCHAR, DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)
SELECT CONVERT(VARCHAR(30), DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)
出去:
Jan 1 0001 12:00AM
为了证明这一点,数字是从 0001 年第一天开始的天数。现在我想知道是否可以在不将日期时间列格式化为 datetime2 的情况下到达那里。我的日期都在 20 世纪和 21 世纪,所以我不需要datetime2
. 我以日期时间形式获取数据并尝试避免类型转换。
如何将这个七千整数作为从 1 年到日期的天数计数器,以及如何在不将日期转换为 datetime2 的情况下从日期返回到该整数?