【发布时间】:2014-09-07 15:06:03
【问题描述】:
问候 StackOverflow 向导。
SQL 日期时间计算总是给我带来麻烦。我正在尝试确定员工的受雇日期是否介于该月的最后一个发薪日和下个月的第一天之间。 (即,他们是否在雇佣月份获得了薪水。
已知:
- 我知道我们的发薪日是每隔一个星期五。
- 我知道 1970 年 1 月 2 日是发薪日,该日期早于最长的日期 我们有活跃的员工。
- 我知道每个在职员工的聘用日期(从表中提取)。
- 我知道(可以计算)雇用后的第一个月 日期。
我似乎无法理解的是如何将种子日期 (01/02/1970) 与 datediff、dateadd、datepart 等一起使用来确定在相关雇用日期和下个月的第一天。
在伪代码中,这是我想要做的:
declare @seedDate datetime = '01/02/1970' -- Friday - Payday seed date from which to calculate
declare @hireDate datetime = '09/26/2008' -- this date will actually be pulled from ServiceTotal table
declare @firstOfMonth datetime = DATEADD(MONTH, DATEDIFF(MONTH, 0, @hireDate) + 1, 0) -- the first of the month following @hireDate
declare @priorPayDate datetime -- calculate the friday payday immediately prior to @firstOfMonth
if @priorPayDate BETWEEN @hireDate AND @firstOfMonth
begin
-- do this
end
else
begin
-- do that
end
使用上面硬编码的@hireDate 和@seedDate 来确定每隔一个星期五的发薪日,我知道在 2008 年 9 月 19 日有一个发薪日,直到 2008 年 3 月 10 日才有另一个发薪日,所以上面的布尔值是 FALSE,我会“做那个”而不是“做这个”。如何确定@priorPayDate 的值?
【问题讨论】:
标签: sql-server tsql datetime datediff dateadd