【发布时间】:2017-07-28 09:46:18
【问题描述】:
我有一张有很多员工的表,比如说“员工”表。此表有一个日期列等。假设此列名为“InjuryDate”。
我想选择所有满足以下条件的员工:
- InjuryDate 在当前月份内,例如,如果当前月份是 7 月,我希望所有员工:InjuryDate >= 01/07/2017 和 InjuryDate
- InjuryDate 介于上个月的第 20 天和当月的第一天之间。例如,如果当前月份是 7 月,我希望所有员工满足:InjuryDate >= 20/06/2017 和 InjuryDate
所以考虑到here所说的(考虑到SQL Server可以在列上使用索引,如果合适的话),我做了以下查询:
DECLARE @today datetime = getdate()
DECLARE @Day int = 20
DECLARE @Month int = MONTH(dateadd(month, -1, @today))
DECLARE @Year int = YEAR(dateadd(month, -1, @today))
DECLARE @EarlyDate datetime = cast(cast(@Year*10000 + @Month*100 + @Day as varchar(255)) as date)
SELECT *
FROM Employees
WHERE (
-- Condition 1
InjuryDate >= cast(@today - day(@today) + 1 as date)
AND
InjuryDate < dateadd(month, 1, cast(@today - day(@today) + 1 as date) )
)
OR
(
-- Condition 2
InjuryDate >= @EarlyDate
AND
InjuryDate < cast(@today - day(@today) + 1 as date)
)
是否正确,或者有其他更好的方法吗?
我使用的是 SQL Server 2008。
【问题讨论】:
标签: sql-server sql-server-2008 datetime sql-server-2008-r2 getdate