我对C#和Microsoft SQL Server相当新,但我使用C#在Visual Studio中编写了一个代码,该代码将在.csv
文件中读取,解析数据并将正确的值放在Microsoft的正确列中SQL Server表。
我遇到的问题是发送给我的日期是纪元日期。我知道我的号码正在计算从18/31/1899 11:59 pm开始的秒数。现在,我把它作为一个数字输入到我的表中。
例如:3673900800。我想知道是否有办法在我的表中更改我的表定义,以便它自动将该数字转换为日期。
例如,将数据类型设置为smalldatetime
。我试过这个,但它没有用。我是否必须转换代码中的数字。在将它发送到SQL表之前,还是有办法让服务器自动转换它
答案 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