我有一个SQL查询,它将日期时间转换为 106格式,然后我将空格替换为-
,这在执行时花费了大约4分钟的时间。示例如下
REPLACE(CONVERT(VARCHAR,GETDATE(),106),' ','-') DDate
输出19-Feb-2015
没有替换我的查询是0秒
有没有其他方法可以获得上面提到的自定义格式日期?
我知道REPLACE
会比较结果项的集合。
但它不应该花费4分钟来替换100到200个数据。
有什么想法吗?
查询为
SELECT TOP(ISNULL(100,'10000'))
FD.Flight 'Select'
,FD.Filename
,ISNULL(FD.RefNo, 'FLT-' + CONVERT(VARCHAR, FD.FLID)) 'FlightID'
,FD.Registration
,ISNULL(FD.FlightNumber, '') FlightNumber
**,REPLACE(CONVERT(VARCHAR,FD.TKD,106),' ','-') TODate**
,FD.TOGMT
**,REPLACE(CONVERT(VARCHAR,FD.LKD,106),' ','-') LDDate**
,FD.LDGMT
,FD.Origin
,FD.Destination
,FD.Pilot
,FD.CoPilot
**,REPLACE(CONVERT(VARCHAR,FD.DumpDate,106),' ','-') DDate**
,FD.UserName
,FD.FlightCount
,FD.AcVariation
FROM
dbo.vw_FlightDetails FD
LEFT JOIN [dbo].FlightRemark RM ON RM.FlightID = FD.FLID
WHERE
1=1
ORDER BY
FD.TKD DESC
,FD.TOGMT DESC
大胆的区域是我面临的问题
答案 0 :(得分:0)
很难说出这里发生了什么,但你可以试试这个:
select <all your _other_ columns>,
ISNULL(x.RefNo, 'FLT-' + CONVERT(VARCHAR, x.FLID)) FlightID,
REPLACE(CONVERT(VARCHAR, x.TKD, 106),' ','-') TODate,
REPLACE(CONVERT(VARCHAR, x.LKD, 106),' ','-') LDDate,
REPLACE(CONVERT(VARCHAR, x.DumpDate, 106),' ','-') DDate,
from (
SELECT TOP (ISNULL(100,'10000'))
FD.Flight 'Select'
,FD.Filename
,FD.RefNo,
,FD.FLID
,FD.Registration
,ISNULL(FD.FlightNumber, '') FlightNumber
,FD.TKD
,FD.TOGMT
,FD.LKD
,FD.LDGMT
,FD.Origin
,FD.Destination
,FD.Pilot
,FD.CoPilot
,FD.DumpDate
,FD.UserName
,FD.FlightCount
,FD.AcVariation
FROM
dbo.vw_FlightDetails FD
LEFT JOIN [dbo].FlightRemark RM ON RM.FlightID = FD.FLID
WHERE
1=1
ORDER BY
FD.TKD DESC
,FD.TOGMT DESC
) x
基本上,将查询埋入子查询中,然后仅在结果行上格式化日期。我怀疑这是因为top()语句而发生的......它可能使用REPLACE处理的行多于它需要的行。