Sre*_*har 21 sql t-sql sql-server ssis etl
我的csv文件中有一个名为DateOfBirth的列,带有Excel Date Serial Number Date
例:
36464
37104
35412
Run Code Online (Sandbox Code Playgroud)
当我在Excel中格式化单元格时,这些单元格被转换为
36464 => 1/11/1999
37104 => 1/08/2001
35412 => 13/12/1996
Run Code Online (Sandbox Code Playgroud)
我需要在SSIS或SQL中进行这种转换.怎么能实现这一目标?
Nic*_*aid 33
在SQL中:
select dateadd(d,36464,'1899-12-30')
-- or thanks to rcdmk
select CAST(36464 - 2 as SmallDateTime)
Run Code Online (Sandbox Code Playgroud)
在SSIS中,请看这里
http://msdn.microsoft.com/en-us/library/ms141719.aspx
Jac*_*ago 14
标记的答案不正常,请将日期更改为"1899-12-30"而不是"1899-12-31".
select dateadd(d,36464,'1899-12-30')
Run Code Online (Sandbox Code Playgroud)
您可以将其强制转换为SQL smalldatetime:
cast(41869 - 2 as smalldatetime)
Run Code Online (Sandbox Code Playgroud)
SQL Server计算其日期从01/01/1900和Excel从12/30/1899 = 2天.
总而言之:
select cast(@Input - 2e as datetime)
Run Code Online (Sandbox Code Playgroud)
解释:
Excel 将日期时间存储为浮点数,表示自 20 世纪初以来经过的时间,而 SQL Server 可以以相同的方式轻松在浮点数和日期时间之间进行转换。Excel 和 SQL Server 将此数字转换为日期时间之间的差异为 2 天(截至 1900-03-01,即)。使用字面量2e来表示这种差异会通知 SQL Server 将其他数据类型隐式转换为浮点型,以实现非常输入友好且简单的查询:
select
cast('43861.875433912' - 2e as datetime) as ExcelToSql, -- even varchar works!
cast(cast('2020-01-31 21:00:37.490' as datetime) + 2e as float) as SqlToExcel
-- Results:
-- ExcelToSql SqlToExcel
-- 2020-01-31 21:00:37.490 43861.875433912
Run Code Online (Sandbox Code Playgroud)
小智 5
这实际上为我工作
dateadd(mi,CONVERT(numeric(17,5),41869.166666666664)*1440,'1899-12-30')
Run Code Online (Sandbox Code Playgroud)
(该日期再减去1天)
指负面评论帖子
| 归档时间: |
|
| 查看次数: |
56287 次 |
| 最近记录: |