我有一张这样的桌子。 workershiftid列是自动增量。
我必须创建一个每月第一天运行的工作,并相应地更改开始和结束日期。所有工作都相同。
job
:
Workershiftid | entityid | startdate | enddate | shiftid
1 | 1 | 2016-06-01 | 2016-06-30 | 1
2 | 2 | 2016-06-01 | 2016-06-30 | 4
3 | 4 | 2016-06-01 | 2016-06-30 | 6
4 | 7 | 2016-06-01 | 2016-06-30 | 14
我尝试了这个查询:
insert into job (entityid, startdate, enddate, shiftid)
select entityid, startdate, enddate, shiftid
from job
where startdate = '2016-06-01'
但它正在输出
Workershiftid | entityid | startdate | enddate | shiftid
1 | 1 | 2016-06-01 | 2016-06-30 | 1
2 | 2 | 2016-06-01 | 2016-06-30 | 4
3 | 4 | 2016-06-01 | 2016-06-30 | 6
4 | 7 | 2016-06-01 | 2016-06-30 | 14
5 | 1 | 2016-06-01 | 2016-06-30 | 1
6 | 2 | 2016-06-01 | 2016-06-30 | 4
7 | 4 | 2016-06-01 | 2016-06-30 | 6
8 | 7 | 2016-06-01 | 2016-06-30 | 14
如果我在7月1日运行它,如何将startdate更改为2016-07-01?
答案 0 :(得分:1)
一个月的第一天和最后一天可以计算如下:
SELECT DATEADD(month, DATEDIFF(month, 0, getdate()), 0) AS StartOfMonth
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) as EndOfMonth
所以你可以尝试这样的事情:
declare @start datetime
declare @end datetime
SELECT @start = DATEADD(month, DATEDIFF(month, 0, getdate()), 0)
SELECT @end = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
insert into job (entityid,startdate,startdate,shiftid)
select entityid,@start,@end,shiftid
from job
where startdate='2016-06-01'
答案 1 :(得分:0)
使用GETDATE()
了解当前日期
select entityid,startdate,enddate,shiftid
from job where startdate=cast(getdate() as date)
Getdate()
将与time
生成日期。要从getdate()
使用CAST
如果您想获得当月的第一天,请使用此
Select CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS DATE)