需要按月更改startdate

时间:2016-06-27 09:04:11

标签: sql sql-server

我有一张这样的桌子。 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?

2 个答案:

答案 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)