DateDiff给出了ORDER BY中遇到的常量表达式

时间:2013-01-24 17:04:02

标签: sql sql-server-2008 date sql-order-by datediff

我想编辑一个查询但是我被卡住了。我想按日期订购(最初是'2012-12-28'),但我读过它必须转换为unix时间戳来做到这一点。 我不知道我做错了所以请帮助我! 奇怪的是当我单独执行DATEDIFF时没有问题。但是,当我把它放在查询中时,就有了。

有人可以帮帮我吗? 这是查询。简化过程。

"SELECT TOP 6 * FROM jd_lighthouses WHERE locations_aanvang != '' ORDER BY DATEDIFF(s, '1970-01-01', '2012-12-28 00:00:00 +1:00') DESC";

我得到的错误是:

A constant expression was encountered in the ORDER BY list position 1

提前致谢!

亲切的问候, BRAM

  

这里的评论是真实的代码:

     

"SELECT TOP 6 * FROM jd_lighthouses WHERE locations_aanvang != '' ORDER BY DATEDIFF(s, '1970-01-01', locations_aanvang+' 00:00:00 +1:00') DESC"

1 个答案:

答案 0 :(得分:1)

从语法上讲,你可以做到

ORDER BY (SELECT DATEDIFF(s, '1970-01-01', '2012-12-28 00:00:00 +1:00')) DESC

这完全没有意义,但已经过优化(没有排序)。

DATEDIFF(s, '1970-01-01', '2012-12-28 00:00:00 +1:00')的值对于所有行都是相同的,因此在ORDER BY

中没用

您的意思是引用列而不是使用硬编码日期吗?

ORDER  BY DATEDIFF(s, some_column, '2012-12-28 00:00:00 +1:00') DESC