Sql server 将整型字段日期时间转换为日期时间

Sql server 将整型字段日期时间转换为日期时间,sql-server,datetime,sql-server-2012,unix-timestamp,Sql Server,Datetime,Sql Server 2012,Unix Timestamp,我在SQL Server 2012中工作。数据集中的My datetime列如下所示:1512543210。该列为int。我想将其转换为类似于dd-mm-yyyy hh:mm:ss的内容,例如01-01-2019 12:12:12。但我不能这样做。我正在使用以下代码: select dateadd(SS, 1512543210, '01/01/1970 00:00:00') as datetime from sampledb 执行查询后,我得到了这个 2017-12-06 00:00:00.0

我在SQL Server 2012中工作。数据集中的My datetime列如下所示:
1512543210
。该列为int。我想将其转换为类似于
dd-mm-yyyy hh:mm:ss
的内容,例如
01-01-2019 12:12:12
。但我不能这样做。我正在使用以下代码:

select dateadd(SS, 1512543210, '01/01/1970 00:00:00') as datetime
from sampledb
执行查询后,我得到了这个

2017-12-06 00:00:00.0
但是我想要这种格式

06-12-2017 00:00:00

您可以使用CONVERT选项

select CONVERT(varchar,dateadd(SS,DateTime,'01/01/1970 00:00:00') ,21) as datetime from sampledb

您可以使用
DATEADD
将UNIX时间戳转换为
DATETIME
,并使用
FORMAT
函数转换为:


话虽如此,Java有DateTimeFormatter类用于格式化日期。时间戳可用于直接构造日期对象。

您可以在数据库查询中转换它,如注释和至少一个其他答案中所述,但也可以在Java中转换:

看看这个例子:

publicstaticvoidmain(字符串参数[]){
//从数据库中获取int表示的时刻
瞬间=瞬间秒(1512543210);
//创建datetime对象(现代java api)
LocalDateTime ldt=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());
//为您选择的模式创建格式化程序
DateTimeFormatter dtf=模式的DateTimeFormatter.of(“dd-MM-yyy-HH:MM:ss”);
//然后使用所需格式打印日期时间
System.out.println(ldt.format(dtf));
}
这个输出

06-12-2017 07:53:30
在我的IDE中,请检查您的IDE中的代码

请注意,您不需要在SQL中执行
DATEADD
操作,只需通过类似
resultSet.getInt(…)
的方式从数据库中获取
int
值,并将其传递给
Instant.ofEpochSeconds(…)
,它将根据
“1970-01-01 00:00”
计算时间

试试这个

select FORMAT(dateadd(SS,1512543210,'01/01/1970 00:00:00'), N'MM-dd-yyyy hh:mm:ss')

如果您使用的是较旧版本的SQL Server,
format
功能不可用。另一种方法是使用样式
105
(意大利语)来获取
MM dd yyyy
零件。然后,您可以使用
120
(odbc规范)样式的最后一部分来获得
hh:mm:ss
部分:

select convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 105) + ' ' + 
       substring(convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 20), 12, 8)
-->
06-12-2017 06:53:30

日期和时间数据类型没有“格式”,它们存储为二进制值。如果日期的格式很重要,那么您需要在表示层中解决这个问题,而不是在SQL中。为什么这个标记为Java?将
dateadd(…)
包装在
format(…,'yyyy-MM-dd hh:MM:ss')
中。顺便说一句,日期似乎是2017年12月6日。Carlos Heuberger,我正在使用java进行开发。我尝试了这个方法,但没有成功。问题是针对SQL Server 2012,但在SQL Server 2017中添加了
格式
,在MSDN上很难找到,但同意,+1“在SQL Server 2017中”这是一个令人难以置信的误导,但它肯定是在2012年添加的@Andomar。我将在github上提出更改请求。@SalmanA我还有一个疑问,那就是如何将2017年12月6日转换为“1512543210”这种格式
SELECT DATEDIFF(SECOND,'19700101','20171206')
什么让你认为Java是一个合适的解决方案?@Andomar问题被标记为
Java
。。。很明显,情况已经不是这样了,但这提供了一个替代方案。啊哈,对了,历史记录显示Java标记被编辑过out@deHaar值的输出是错误的。实际输出是06-12-2017 06:53:30。@AbdulRashidA可能是一个时区,您可以使用
ZonedDateTime
OffsetDateTime
,设置一个区域或偏移量以使时间正确。当我运行此查询时,我得到了此输出2017-12-06 00:00:00.0。此查询中不会读取时间。当我将此查询与字段名一起使用时。我犯了一个错误,即日期正确,但所有行上的时间都相同。是否替换1512543210的两个实例?
select convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 105) + ' ' + 
       substring(convert(varchar(30), dateadd(second, 1512543210, '1970-01-01'), 20), 12, 8)
-->
06-12-2017 06:53:30