我有一个由2个日期列组成的表。一列是交易日期,下一列是我用作批日期的日期,我根据交易日期的哪一天对日期进行分组。 我的表用于演示目的是基于此sql脚本构建的
CREATE TABLE [DateDemo1](
[id] [int] IDENTITY(1,1) NOT NULL,
[mydate] [datetime] NULL,
[batchdate] [datetime] NULL
)
我插入的现有数据是(日期格式为dd / mm / yyyy)
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('01/03/2017', '01/03/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('02/03/2017', '01/03/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('03/03/2017', '01/03/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('06/03/2017', '01/03/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('01/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('02/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('03/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('04/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('05/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('06/04/2017', '01/04/2017')
INSERT INTO [DateDemo]([mydate],[batchdate]) VALUES ('07/04/2017', '01/04/2017')
我打算将每行的批处理日期更新为组(本月的第1天或本月的第2天)。使用确定每个行条目的月份的第3天将被分类。例如,2017年3月2日的行应该属于2017年2月2日的批次日期。 2017年3月3日将是2017年3月1日的批次日期,2017年3月4日将是2017年3月2日的批日期,为了论证,4月7日将是2017年4月2日的批次日期。 我希望的结果集我希望它如下
id, mydate, batchdate
1, 01/03/2017 , 02/02/2017
2, 02/03/2017 , 02/02/2017
3, 03/03/2017 , 01/03/2017
4, 06/03/2017 , 02/03/2017
5, 01/04/2017 , 02/03/2017
6, 02/04/2017 , 02/03/2017
7, 03/04/2017 , 01/04/2017
8, 04/04/2017 , 02/04/2017
9, 05/04/2017 , 02/04/2017
10, 06/04/2017 , 02/04/2017
11, 07/04/2017 , 02/04/2017
我需要一个SQL UPDATE函数,它将为我提供我正在寻找的结果。伪代码也将受到欢迎。
提前致谢。
答案 0 :(得分:0)
使用两个案例表达式修改截断日期到月份。
update DateDemo
set batchdate = dateadd(day
, case when day(mydate) = (3) then 0 else 1 end
, dateadd(month, datediff(month, 0, mydate )
+ case when day(mydate) in(1,2) then -1 else 0 end
, 0)
);
select
mydate
, batchdate
from DateDemo;
rextester演示:http://rextester.com/CKGNS20776
返回:
+------------+------------+
| mydate | batchdate |
+------------+------------+
| 2017-03-01 | 2017-02-02 |
| 2017-03-02 | 2017-02-02 |
| 2017-03-03 | 2017-03-01 |
| 2017-03-06 | 2017-03-02 |
| 2017-04-01 | 2017-03-02 |
| 2017-04-02 | 2017-03-02 |
| 2017-04-03 | 2017-04-01 |
| 2017-04-04 | 2017-04-02 |
| 2017-04-05 | 2017-04-02 |
| 2017-04-06 | 2017-04-02 |
| 2017-04-07 | 2017-04-02 |
+------------+------------+