代码之家  ›  专栏  ›  技术社区  ›  Morteza Jangjoo

如何在SQL Server中仅更新日期的天数

  •  8
  • Morteza Jangjoo  · 技术社区  · 7 年前

    如何将表中日期列中的所有日期更新为特殊日期?

    我只想换一天,不想换一个月,不想换一年

    我的桌子:

    id    RegisterDate
    ------------------
    1      2001-01-18
    2      2018-09-13
    3      1999-04-28
    4      2012-12-15
    

    我期望的结果是:

    id    RegisterDate
    ------------------
    1      2001-01-02
    2      2018-09-02
    3      1999-04-02
    4      2012-12-02
    
    4 回复  |  直到 7 年前
        1
  •  26
  •   Gordon Linoff    7 年前

    可能最简单的方法是使用 datefromparts() :

    update t
        set RegisterDate = datefromparts(year(RegisterDate), month(RegisterDate), 2);
    

    在较旧版本的SQL Server中工作的另一种方法是:

    update t
         set RegisterDate = dateadd(day, 2 - day(RegisterDate), RegisterDate);
    

    作为侧节点:无需对此使用字符串操作。内置的日期/时间函数就足够了。

        2
  •  0
  •   uzi    7 年前

    你可以通过 eomonth SQL server 2012提供的函数

    update myTable
    set RegisterDate = dateadd(dd, 2, eomonth(RegisterDate, -1))
    

    所有版本的另一种方式

    update myTable
    set RegisterDate = cast(convert(char(6), RegisterDate, 112)+'02' as date)
    
        3
  •  0
  •   marc_s    7 年前

    如果SQL Server版本高于2012,则可以使用 FORMAT 功能:

    CREATE TABLE T
    (
        ID INT,
        RegisterDate DATE 
    )
    
    INSERT INTO T 
    VALUES (1, '2001-01-18'), (2, '2018-09-13'),
           (3, '1999-04-28'), (4, '2001-12-15');
    
    UPDATE T
    SET RegisterDate = FORMAT(RegisterDate,'yyyy-MM-') + '02'
    

    sqlfiddle: http://sqlfiddle.com/#!18/1163b/1

        4
  •  0
  •   hkravitz    7 年前

    对于 所有版本 SQL Server(自2000年起)

    DECLARE @table TABLE (dt DATE)
    INSERT INTO @table 
    
    SELECT GETDATE()-1
    UNION ALL 
    SELECT GETDATE()-2
    UNION ALL 
    SELECT GETDATE()-3
    UNION ALL 
    SELECT GETDATE()-5
    
     UPDATE @table
     SET dt = DATEADD(DAY,1,DATEADD(MONTH,DATEDIFF(MONTH,0,dt),0))
    
     SELECT dt 
     FROM @table