为什么此SQL查询以降序返回数据?

时间:2015-10-28 14:09:34

标签: sql sql-server tsql

尝试理解为什么此查询按降序生成结果

SELECT
    DateDiff(minute, convert(datetime, SUBSTRING(MSH_07_DateTime, 1, 8) + ' ' + SUBSTRING(MSH_07_DateTime, 9, 2) + ':' + SUBSTRING(MSH_07_DateTime, 11, 2), 100), GetDate()) 
FROM 
    EPDBHL7.DBO.[HL7MSH] 
WHERE
    MessageStatus <> 'ok' 

4 个答案:

答案 0 :(得分:2)

除非您使用ORDER BY,否则您无法保证任何结果订单。因此,您可能会根据数据的存储方式或计划程序如何使用索引

获取数据来获取订单

只需添加

 where MessageStatus <> 'ok' 
 order by DateDiff(minute,convert(datetime, SUBSTRING ( MSH_07_DateTime ,1 , 8 ) + ' '+ SUBSTRING ( MSH_07_DateTime ,9 , 2 ) + ':'+ SUBSTRING ( MSH_07_DateTime ,11 , 2 ), 100) 
 or 
 order by 1 

使用第一列订购

答案 1 :(得分:0)

如果您没有指定ORDER BY子句,那么您将无法指定获得结果的顺序。

  

如果您想依赖查询的顺序,请始终添加ORDER BY

答案 2 :(得分:0)

Select DateDiff(minute,convert(datetime, SUBSTRING ( MSH_07_DateTime ,1 , 8 ) + ' '+ SUBSTRING ( MSH_07_DateTime ,9 , 2 ) + ':'+ SUBSTRING ( MSH_07_DateTime ,11 , 2 ), 100) as date_diff,GetDate()) 
FROM EPDBHL7.DBO.[HL7MSH] 
where MessageStatus <> 'ok' 
order by date_diff DESC

答案 3 :(得分:0)

除非您使用ORDER BY,否则您将获得物理存储方式的结果。它可能是完全正确的顺序,但不是真的,以编程方式排序。