在SQL的WHERE子句中,你不能使用“即时”列名。(在ORDER BY
子句中可以。)你必须将其作为子查询或重复表达式。
SELECT * FROM (
SELECT *, DATEADD(d, 1 ,dStartDateTime) dCloseDate
FROM EventItem
) SUBQ
WHERE dCloseDate > '1990-01-01 07:00:00.000'
-or-
SELECT *, DATEADD(d, 1 ,dStartDateTime) dCloseDate
FROM EventItem
WHERE DATEADD(d, 1 ,dStartDateTime) > '1990-01-01 07:00:00.000'
为什么不应该这样做?
话虽如此,但您正在对列 dStartDateTime 执行需要进行表扫描的函数。请始终在另一侧执行函数,以便可以针对 dStartDateTime
(日期时间列)上的索引测试找到的值。
SELECT *, DATEADD(d, 1 ,dStartDateTime) dCloseDate
FROM EventItem
WHERE dStartDateTime > DATEADD(d, -1 ,'1990-01-01 07:00:00.000')