【问题标题】:Update only Date portion of DateTime仅更新 DateTime 的 Date 部分
【发布时间】:2020-11-02 17:17:55
【问题描述】:

我使用的是 SQL Server 2008。 我在数据库中有一个日期时间 其中值为

    10/4/2012 8:03:00 AM

如何只更新日期部分?

字段名称为 dTime。

我喜欢将日期更新为 2012 年 10 月 5 日,并保持时间不变。

【问题讨论】:

  • 你想做什么样的更新?

标签: sql-server sql-server-2008


【解决方案1】:
UPDATE
    tableX
SET
    columnX = DATEADD( day, DATEDIFF( day, columnX, '20120510' ), columnX ) 
WHERE
    (conditionX) ;

【讨论】:

    【解决方案2】:
    CREATE TABLE dbo.MyTable(
        ID INT IDENTITY(1,1) PRIMARY KEY,
        DTColumn DATETIME NOT NULL
    );
    GO
    INSERT dbo.MyTable(DTColumn) VALUES 
    ('20120410 08:03:00.000'),
    ('20010101 01:01:01.000');
    
    BEGIN TRANSACTION;
        UPDATE  dbo.MyTable
        -- Style 126 / ISO8601 = yyyy-mm-ddThh:mi:ss.mmm        
        SET     DTColumn = STUFF(CONVERT(VARCHAR(50),DTColumn,126) ,1, 10, '2012-05-10') 
        -- Uncomment this line to see the old and new values
        -- OUTPUT   deleted.DTColumn AS OldValue, inserted.DTColumn AS NewValue
        WHERE   CONVERT(DATE,DTColumn)='2012-04-10' 
    
        SELECT * FROM dbo.MyTable;
    ROLLBACK;
    -- COMMIT
    

    结果:

    OldValue                NewValue
    ----------------------- -----------------------
    2012-04-10 08:03:00.000 2012-05-10 08:03:00.000
    
    ID          DTColumn
    ----------- -----------------------
    1           2012-05-10 08:03:00.000
    2           2001-01-01 01:01:01.000
    

    【讨论】:

    • 很好地使用插入和删除的表。
    【解决方案3】:
    UPDATE YourTable
    SET YourColumn = DATEADD(MONTH,1,YourColumn) 
    WHERE YourColumn = '20120410 08:03:00'
    

    我假设您以DD/MM/YYYY 格式发布您的日期。如果是MM/DD/YYYY,你应该改用DATEADD(DAY,1,YourColumn)

    【讨论】:

    • 嘿,你的意思是第一个参数受日期格式影响吗?我认为文档说它代表日期的一部分,我们不需要关心日期格式。 DATEADD(MONTH, 1, YourColumn) 给日期加一个月,但DATEADD(DAY, 1, YourColumn) 只给日期加 1 天。
    【解决方案4】:
     UPDATE table1 
     SET columnDatetime = '10/5/2012' + ' ' + CONVERT(varchar(12), CONVERT(time, columnDatetime))
     WHERE CONVERT(date, columnDatetime) = '10/4/2012'
    

    只需使用 varchar 并在其中修改您想要的内容,而无需触及时间。 在此示例中,我使用 CONVERT(varchar(12), columnDatetime) 来获取长度为 12 个字符的字符串,假设格式为“20:10:15.250”。

    【讨论】:

      【解决方案5】:

      update tableX set dttime = CONCAT("2012-10-24 ",time(dttime)) WHERE date(dt1)='2012-05-10'

      【讨论】:

      • Awww... 那段可怜的小代码。它看起来如此害怕,以至于人们可能不喜欢它,如此孤独和脆弱。你不想通过添加解释来给它一些陪伴和保护吗? (也许还有一些改进的格式......)请阅读How to Answer
      猜你喜欢
      • 2016-06-04
      • 2010-10-08
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2010-12-23
      • 2022-01-06
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多