繁体   English   中英

使用MS-SQLSERVER的SQL UPDATE函数日期列

[英]SQL UPDATE Function Date Columns using MS-SQLSERVER

我有一个表,其中包含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')

我打算将每行的batchdate更新为组(每月的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函数,该函数将为我提供所需的结果。 伪代码也将受到欢迎。

提前致谢。

使用两个case表达式将日期的截断修改为月。

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;

extrester演示: 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 |
+------------+------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM