更改显示数据的日期

时间:2013-06-24 16:36:28

标签: sql sql-server sql-server-2008 date

我正在使用一个非常大的SQL Server数据库,它的Date列旨在显示为:

Date(numeric(17,9), not null):

20130623.143448060

需要的输出

相同的Date转换为:

6/23/2013 10:34:48 AM

我当前的查询是:

  SELECT ItemId, Date, Object, SourceSite, DestSite FROM JnlMediumMove WHERE UserCode = 'Automation' AND LEFT(Date,8)=CONVERT(VARCHAR(8),GETDATE()-1,112) Order By Date Desc;

此查询中显示的“日期”列下的所有日期都需要更改为所需的输出。我只有两个要求,1)UserCode是自动化和2)只显示当天前一天输入的条目。 (只对那些条目感兴趣,否则会显示太多输出)

我想知道是否有一个SQL查询会将Date转换为所需输出的格式?

1 个答案:

答案 0 :(得分:3)

正如许多评论所说,以这种方式存储日期是一个坏主意。不过,这里有一种将数值转换为DATETIME的方法:

DECLARE @Date NUMERIC(17,9)

SET @Date = 20130623.143448060

SELECT  DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT(YourDate,8)+' '+
                        SUBSTRING(YourDate,10,2)+':'+
                        SUBSTRING(YourDate,12,2)+':'+
                        SUBSTRING(YourDate,14,2)+'.'+
                        SUBSTRING(YourDate,15,3))) YourDate
FROM (  SELECT CONVERT(VARCHAR(18),@Date) YourDate) A

结果:

╔═════════════════════════╗
║        YourDate         ║
╠═════════════════════════╣
║ 2013-06-23 10:34:48.807 ║
╚═════════════════════════╝

从这里开始,您可以根据需要格式化该日期。

<强>已更新

如果您需要在Date列上使用此转换,请使用:

SELECT  ItemId,
        DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
                        SUBSTRING([Date],10,2)+':'+
                        SUBSTRING([Date],12,2)+':'+
                        SUBSTRING([Date],14,2)+'.'+
                        SUBSTRING([Date],15,3))) [Date],
        [Object], 
        SourceSite, 
        DestSite
FROM (  SELECT  ItemId,
                CONVERT(VARCHAR(18),[Date]) [Date],
                [Object],
                SourceSite,
                DestSite,
                            UserCode
        FROM JnlMediumMove) A
WHERE UserCode = 'Automation' 
AND LEFT([Date],8)=CONVERT(VARCHAR(8),GETDATE()-1,112) 
ORDER BY [Date] DESC;