【问题标题】:Converting number to epoch date in SQL Server table在 SQL Server 表中将数字转换为纪元日期
【发布时间】:2016-10-14 03:22:59
【问题描述】:

我对 C# 和 Microsoft SQL Server 还很陌生,但我使用 C# 在 Visual Studio 中编写了一个代码,该代码将读取 .csv 文件,解析数据并将正确的值放置在 Microsoft SQL Server 的正确列中桌子。

我遇到的问题是发送给我的日期是纪元日期。我知道我的号码是从 1899 年 12 月 31 日晚上 11:59 开始计算秒数。现在,我只是将它作为数字输入到我的表中。

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

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

【问题讨论】:

  • 您能否发布您用于将该日期转换为整数的确切代码..?您是否也对以下C# stackoverflow Convert DateTime String into Epoch time 进行了谷歌搜索,这是一个帮助您入门的链接stackoverflow.com/questions/9453101/…
  • 我没有将日期转换为整数。它在我收到的文件中以整数形式发送
  • 然后做同样的事情将整数转换为时间戳我相信也有将整数转换为时间戳的示例,请在您的研究/谷歌搜索中加倍努力..
  • 你确定它使用 1899-12-31 23:59 作为开始吗?这很奇怪。 Unix Epoch 日期是自 1970-01-01 以来的秒数。
  • 我做了研究。那不是我的问题。我的问题是,如果我给它一个特定的数据类型和默认值,它是否可以在我的 SQL 表中为我自动转换它,或者如果唯一的选择是在将它插入我的表之前手动转换它

标签: c# sql-server


【解决方案1】:

您可以使用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

【讨论】:

  • 当我将字段更改为日期时间时出现此错误:将“3674419200”转换为类型:“日期时间”时出错。输入字符串中的字符多于格式字符串中的字符:'ddMMyyyy'
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2018-04-29
    • 2020-05-20
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2013-05-19
    相关资源
    最近更新 更多