0

我正在使用一个非常大的 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)只显示当天前 1 天输入的条目。(只对那些条目感兴趣,否则会显示太多输出)

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

4

1 回答 1

3

正如许多评论所说,以这种方式存储日期是一个坏主意。不过,这是将数值转换为 1 的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;
于 2013-06-24T17:06:23.373 回答