我正在使用一个非常大的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
转换为所需输出的格式?
答案 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;