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 中的结果后,我确认序列号与我预期的日期和时间完全匹配。
我似乎无法在任何地方找到这个问题的答案 --- 我想将 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 中的结果后,我确认序列号与我预期的日期和时间完全匹配。