kat*_*tit 3 sql t-sql sql-server
我有以下种子输入数据:
这就是公司工资单如何发展的例子.
现在,我只有1个日期输入,例如12/30(今天)我需要输出当前支付期的日期范围:12月17日到12月30日
同样的,如果我输入1月3日 - 我应该回到2012年12月31日到1月13日
T-SQL中有没有快捷方式,或者我必须做循环?
编辑:总结问题.如果我们知道何时开始支付周期(过去) - 我如何计算给定日期的支付期开始?
你需要一些模运算DATEDIFF.
declare @periodStart datetime
declare @periodEnd datetime
set @periodStart = CAST('2011-12-03' as datetime)
set @periodEnd = CAST('2011-12-16' as datetime)
declare @anyDate datetime
set @anyDate = CAST('2011-12-30' as datetime)
declare @periodLength int
set @periodLength = DATEDIFF(day, @periodStart, @periodEnd) + 1
declare @daysFromFirstPeriod int
set @daysFromFirstPeriod = DATEDIFF(day, @periodStart, @anyDate)
declare @daysIntoPeriod int
set @daysIntoPeriod = @daysFromFirstPeriod % @periodLength
select @periodLength as periodLength, @daysFromFirstPeriod as daysFromFirstPeriod, @daysIntoPeriod as daysIntoPeriod
select DATEADD(day, -@daysIntoPeriod, @anyDate) as currentPeriodStart, DATEADD(day, @periodLength -@daysIntoPeriod, @anyDate) as currentPeriodEnd
Run Code Online (Sandbox Code Playgroud)
给出输出
periodLength daysFromFirstPeriod daysIntoPeriod
14 27 13
Run Code Online (Sandbox Code Playgroud)
和
currentPeriodStart currentPeriodEnd
2011-12-17 00:00:00.000 2011-12-31 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2968 次 |
| 最近记录: |