0

我的数据库中有一个日期/时间字段,类型设置为“十进制”。

使用以下查询查询日期/时间字段时:

SELECT my_date_time_field
FROM my_table

它返回以下结果(示例):

1323977278

这意味着表示以下日期和时间(英国日期格式):

30/11/2011 02:50:19 AM

有人告诉我,我从数据库中得到的结果是从那以后经过了多少秒:

1970 年 1 月 1 日 00:00:00

我想知道如何让我的 SQL 查询结果以正确的英国日期格式显示日期。

我已经尝试了以下方法,但对于类似的问题却不起作用:

CONVERT(DATETIME, CAST(my_date_time_field AS VARCHAR(8)), 112)

在执行DATEDIFF函数之前,我是否应该先将 my_date_time_field转换为YYYYMMDDHHMMSS格式?

或者是否有函数将my_date_time_field直接转换为DD-MMM-YYYY HH:MM:SSDD-MM-YYYY HH:MM:SS格式?

4

2 回答 2

0

您可以将值转换为 adatetime使用:

select dateadd(second, 1323977278, '1970-01-01')

然后,您可以根据自己的喜好使用convert()或对其进行格式化format()

于 2017-09-28T10:39:24.400 回答
0

编辑:

虽然下面的解释是最好的,但对于 SQL 2008,我会选择:

SELECT  
CONCAT (CONVERT(VARCHAR, dateadd( S, 1323977278, '1970-01-01'), 103), ' ',  
CONVERT(varchar(15),CAST(dateadd( S, 1323977278, '1970-01-01') AS TIME),100))

创建一个函数会很方便,因为我相信你会经常需要它。

CREATE FUNCTION Decimal_To_Date (
@ctimestamp BIGINT
)
RETURNS datetime
AS
BEGIN
  declare @return datetime

  SELECT @return = FORMAT(CAST(dateadd( S, @ctimestamp, '1970-01-01') AS DATETIME),'dd/mm/yyyy hh:mm tt')

  return @return
END
GO

然后将其用作

SELECT dbo.Decimal_To_Date(1323977278)

你会得到 15/27/2011 07:27 PM

最终(如果你不想要一个功能)只需使用:

FORMAT(CAST(dateadd( S, 1323977278, '1970-01-01') AS DATETIME),'dd/mm/yyyy hh:mm tt')

PS:格式适用于 SQL Server 2012。如果您有以前的版本,则需要使用 CONVERT

PS2:131 代码使用 Hijiri(公历)日历,这不是您想要的...

于 2017-09-28T10:48:55.577 回答