SSMS 2012:将 DATETIME 转换为 Excel 序列号

SSMS 2012: Convert DATETIME to Excel serial number

我似乎无法在任何地方找到这个问题的答案 --- 我想将 SQL 中的日期时间转换为 excel 序列号。

我实际上是在寻找 excel 中的 DATEVALUE 函数,但要在 SQL

中使用

关于如何做到这一点有什么想法吗?谢谢

假设所需日期是 2016-05-25

Select DateDiff(DD,'1899-12-30','2016-05-25')

Returns

 42515

如果你也想要时间部分

Declare @Date datetime = '2016-05-25 20:00'
Select DateDiff(DD,'1899-12-30',@Date)+(DateDiff(SS,cast(@Date as Date),@Date)/86400.0)

Returns

42515.8333333

您只需将 datetime 值转换为 int 并添加 1:

SELECT CONVERT(INT,YourDate) + 1
FROM dbo.SomeTable;

带排序规则:SQL_Latin1_General_CP1_CI_AS

你应该使用

Select DateDiff(DD,'18991230','20160525')

Returns 42515

您可以将“20160525”替换为 getdate() 或日期字段

我 运行 解决了这个问题,发现最优雅的解决方案如下(正如其他人提到的,由于 SQL 和 [=20 之间的差异,添加 +2 是必不可少的=] 日期):

假设“列”是 DateTimeOffset:

SELECT CAST(CAST(COLUMN_TO_BE_CONVERTED as datetime)+2 as float) as EXCEL_DATE_FLOAT

如果该列还不是 DateTimeOffset 而只是 DateTime,则不需要双重转换;你只需要这样的东西:

SELECT CAST(COLUMN_TO_BE_CONVERTED+2 as float) as EXCEL_DATE_FLOAT

两种情况下的结果浮点值都是 excel 识别的日期和时间,您可以轻松地从那里提取您需要的内容。在手动验证 excel 中的结果后,我确认序列号与我预期的日期和时间完全匹配。