在SQL Server表中将数字转换为纪元日期

时间:2016-06-13 15:59:32

标签: c# sql-server

我对C#和Microsoft SQL Server相当新,但我使用C#在Visual Studio中编写了一个代码,该代码将在.csv文件中读取,解析数据并将正确的值放在Microsoft的正确列中SQL Server表。

我遇到的问题是发送给我的日期是纪元日期。我知道我的号码正在计算从18/31/1899 11:59 pm开始的秒数。现在,我把它作为一个数字输入到我的表中。

例如:3673900800。我想知道是否有办法在我的表中更改我的表定义,以便它自动将该数字转换为日期。

例如,将数据类型设置为smalldatetime。我试过这个,但它没有用。我是否必须转换代码中的数字。在将它发送到SQL表之前,还是有办法让服务器自动转换它

2 个答案:

答案 0 :(得分:0)

您可以使用datetime字段并将您的数字插入3673900800 / 60 / 60 / 24(2016-06-03)。

实施例

declare @tmp table(id int identity(1,1), dt datetime, epoch bigint)
insert @tmp(dt,epoch)
values (3673900800/ 60 /60/24,3673900800)

select *,cast(dt as float)*60*60*24 [restore] from @tmp

答案 1 :(得分:0)

这里只需要一些简单的日期数学。

select dateadd(minute, 3673900800/60.0, '1899-12-31 23:59')

处理此问题的一种简单方法是使用计算列。这是一个例子。

create table #Something
(
    EpochDate bigint
    , DateTimeValue AS dateadd(minute, EpochDate/60.0, '1899-12-31 23:59')
)

insert #Something
select 3673900800

select *
from #Something

drop table #Something