将SQL小数日期转换为DD-MM-Yyyy HH:MM:SS格式



我的数据库中有一个日期/时间字段,将类型设置为'Decimal'。

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

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)

我应该转换 my_date_time_field yyyymmddhhmmsss yyyymmddhhmmss 格式在执行 decatiff function之前吗?

或是否有一个函数来转换 my_date_time_field 直接到 DD-MMM-YYYY HH:MM:MM:SS dd-mm-yyyyyHH:MM:SS 格式?

您可以使用:

将值转换为datetime
select dateadd(second, 1323977278, '1970-01-01')

您可以格式化此操作,但是您喜欢使用convert()format()

编辑:

尽管以下解释是最好的,但对于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(Gregorian)日历,这不是您想要的...

最新更新