【问题标题】:Converting SQL Decimal Date to DD-MM-YYYY HH:MM:SS format将 SQL 十进制日期转换为 DD-MM-YYYY HH:MM:SS 格式
【发布时间】:2018-03-10 01:39:40
【问题描述】:

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

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

SELECT my_date_time_field
FROM my_table

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

1323977278

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

30/11/2011 02:50:19 AM

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

01-JAN-1970 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 格式?

【问题讨论】:

  • 用您正在使用的数据库(大概是 SQL Server)标记您的问题。

标签: sql date decimal sql-convert


【解决方案1】:

您可以使用以下方法将该值转换为 datetime

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

然后您可以使用convert()format() 随意格式化。

【讨论】:

  • 但是当你像这样格式化这个值CONVERT(varchar, DATEADD(SECOND,1323977278,'19700101 00:00'), 131 )(英国格式为131)奇怪但它返回20/01/1433 7:27:58:000PM
  • @sarslan 131 代码使用公历,因此几乎把它搞砸了! :)
  • 谢谢!这会将结果转换为:YYYY-MM-DD HH:MM:SS.000。
  • @DidarCern 。 . .它将值转换为datetime 值。即以该格式呈现。要获取特定格式,请使用convert()
【解决方案2】:

已编辑:

虽然下面的解释最好,但对于 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(公历)日历,这不是您想要的...

【讨论】:

  • 谢谢!但不幸的是,我无权在此服务器中创建函数。不过,我会把它传下去,因为它会有用!
  • 只需使用 FORMAT(CAST(dateadd( S, 1323977278, '1970-01-01') AS DATETIME),'dd/mm/yyyy hh:mm tt')
  • 我从 SQL Server 2008 运行。所以我使用了 CONVERT 函数。这就是它的样子: convert(datetime, cast(dateadd(second, [SUBMIT_DATE], '1970-01-01') as datetime), 113) 但它仍然在 'YYYY-MM-DD HH 中显示日期/时间:MM:SS.000' 格式。我也试过'dd/mm/yyyy hh:mm tt'(如上所述),但它返回以下错误:Argument data type varchar is invalid for argument 3 of convert function。我尝试更改我的 CONVERT 和 CAST 函数以返回 VARCHAR 但它仍然返回相同的错误消息。但当然,我追求的是 DATETIME 数据类型。
  • SELECT CONCAT (CONVERT(VARCHAR, dateadd( S, 1323977278, '1970-01-01'), 103), ' ', CONVERT(varchar(15),CAST(dateadd( S, 1323977278 , '1970-01-01') 作为时间),100))
  • 我试过了,它可以工作,但是这个字段的数据类型发生了变化,我需要它是一个 DATETIME 数据类型。谢谢你,卡洛斯 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多