【发布时间】:2017-04-22 10:47:39
【问题描述】:
我正在尝试创建一个存储过程。 在 where 子句中比较三个日期值的最有效方法是什么?
例子:
tbl1.Date1,
tbl2.Date2, -- NOTE: Date2 can be NULL.
tbl3.Date3
示例数据:
Date1 Date2 Date3
2016-12-20 2016-11-21 2016-11-30
2016-11-21 NULL 2016-12-20
首先,我比较 Date1 和 Date2,然后选择“更大”的日期。 然后我将这个“更大”的日期与 Date3 进行比较。 如果比较为真,我将值写入表。
-- This is simplified example:
INSERT INTO records
(
[user_date],
[user_name]
)
SELECT
tbl1.Date1,
tbl1.user_name
FROM
table1 AS tbl1
INNER JOIN table2 AS tbl2 ON tbl1.id = tbl2.id
INNER JOIN table3 AS tbl3 ON tbl2.id = tbl3.id
WHERE
-- I need to know what is bigger, Date1 or Date2, so I can compare correct date to Date3.
ISNULL(tbl2.Date2, tbl1.Date1) <= tbl3.Date3 -- ISNULL, doesn't work here, because Date2 and Date1 can get a value and comparison fails if Date1 is bigger than Date3.
AND ISNULL(tbl2.Date2, tbl1.Date1) > tbl3.last_date
【问题讨论】:
标签: sql sql-server performance tsql stored-procedures