Sql server 将8位数字转换为日期时间

Sql server 将8位数字转换为日期时间,sql-server,tsql,datetime,Sql Server,Tsql,Datetime,我正在使用SQL Server,并且有数字格式的时间,例如63415620 如何将其转换为datetime格式?假设整数值是历元时间戳(即自1970年1月1日以来经过的秒数),可以使用以下表达式将其转换为datetime: dateadd(second, my_integer_column, '19700101') 假设整数值是历元时间戳(即自1970年1月1日以来经过的秒数),可以使用以下表达式将其转换为datetime: dateadd(second, my_integer_column,

我正在使用SQL Server,并且有数字格式的时间,例如
63415620


如何将其转换为
datetime
格式?

假设整数值是历元时间戳(即自1970年1月1日以来经过的秒数),可以使用以下表达式将其转换为
datetime

dateadd(second, my_integer_column, '19700101')

假设整数值是历元时间戳(即自1970年1月1日以来经过的秒数),可以使用以下表达式将其转换为
datetime

dateadd(second, my_integer_column, '19700101')

经过多次猜测,我认为这是
1900-01-01
之后的分钟数。我无法理解为什么贵公司选择这种方式作为他们的时代风格;这不是标准

如果您尝试以下所有方法:

选择DATEADD(毫秒,63415620,'19700101'),
DATEADD(第二个,63415620,'19700101'),
日期(分钟,63415620,'19700101'),
DATEADD(毫秒,63415620,'19000101'),
DATEADD(第二个,63415620,'19000101'),
日期(分钟,63415620,'19000101');

最后一次(
DATEADD(MINUTE,63415620,'19000101')
)返回
2020-07-28 15:00:00
,这似乎是唯一合适的时间。

经过多次猜测,我认为这是
1900-01-01
之后的分钟数。我无法理解为什么贵公司选择这种方式作为他们的时代风格;这不是标准

如果您尝试以下所有方法:

选择DATEADD(毫秒,63415620,'19700101'),
DATEADD(第二个,63415620,'19700101'),
日期(分钟,63415620,'19700101'),
DATEADD(毫秒,63415620,'19000101'),
DATEADD(第二个,63415620,'19000101'),
日期(分钟,63415620,'19000101');


最后(
DATEADD(MINUTE,63415620,'19000101')
)返回
2020-07-28 15:00:00
,这是唯一合适的时间。

那是什么时间?日期+时间的大多数整数表示是UNIX时间值,但
63415620
不是UNIX时间值(秒或毫秒)。所以我们需要更多的细节。所有数据库都有日期类型,并支持索引和分析。使用正确的类型来存储日期。加载时将文本或整数表示形式转换为日期,而不是在加载后尝试恢复数据。这个数字受DST影响吗?哪个时区?使用日期类型比存储一个含义或精度未知的数字更便于携带。@PavelProkop那么您就有了一个严重的数据库设计错误。如果你猜不到那是什么,别人怎么能猜到呢?为什么不使用
date
datetime2
datetimeoffset
?2008引入了新的日期和时间数据类型@PanagiotisKanavos。如果我没记错的话,2005年是
MAX
数据类型,它在2008年立即弃用了
text
image
数据类型。那是什么时间?日期+时间的大多数整数表示是UNIX时间值,但
63415620
不是UNIX时间值(以秒或毫秒为单位)。所以我们需要更多的细节。所有数据库都有日期类型,并支持索引和分析。使用正确的类型来存储日期。加载时将文本或整数表示形式转换为日期,而不是在加载后尝试恢复数据。这个数字受DST影响吗?哪个时区?使用日期类型比存储一个含义或精度未知的数字更便于携带。@PavelProkop那么您就有了一个严重的数据库设计错误。如果你猜不到那是什么,别人怎么能猜到呢?为什么不使用
date
datetime2
datetimeoffset
?2008引入了新的日期和时间数据类型@PanagiotisKanavos。如果我没记错的话,2005年是
MAX
数据类型,这使得
文本
图像
数据类型在2008年被迅速弃用。我建议该公司记录他们的数据,@PavelProkop。考虑到数据库很旧,它应该已经有很多文档了,尽管…@Larnu应用程序超过20年了,可能已经使用了unix时间戳,允许它们在unix或其他没有日期支持的过时的或非常旧的OSs上使用过时的或非常旧的数据库(例如,基于DB2文件),甚至可能是基于文件的数据库,如dBase或Clipper。我记得在2010年发现Unicenter TNG将日期作为Unix时间戳存储在Oracle数据库中。傲慢的TNG顾问试图说服我这是一个Sql Server问题,不知何故,“其他人”对时间戳处理得很好……@Larnu幸运的是,该数据库仅用于存储一家跨国电信公司的本地事件。想象一下,尝试将不同的时区存储为Unix时间戳,更不用说不同的DST规则了……我并不是说将数据存储为一个历元是不标准的,而是说使用自
1900-01-01以来的分钟数是不标准的,@PanagiotisKanavos。例如,自
1970-01-01
以来,UNIX使用秒或毫秒。@Larnu我正准备发表一篇关于懒惰是如何导致某些常见约定的讽刺文章,但后来我想起了IBM早期SQL团队的一位成员的一篇演讲,他说DB2团队希望标准化
where 2=field
,以简化解析。SQL团队并不建议该公司记录他们的数据,@PavelProkop。考虑到数据库很旧,它应该已经有很多文档了,尽管…@Larnu应用程序超过20年了,可能已经使用了unix时间戳,允许它们在unix或其他没有日期支持的过时的或非常旧的OSs上使用过时的或非常旧的数据库(例如,基于DB2文件),甚至可能是基于文件的数据库,如dBase或Clipper。我记得在2010年发现Unicenter TNG将日期作为Unix时间戳存储在Oracle数据库中。傲慢的TNG顾问试图说服我,这是一个Sql Server问题,不知何故,“其他人”对待时间