2013-08-20 211 views
4
日期部分

我使用SQL Server 2008的 我在數據庫 其中值是只更新日期時間

10/4/2012 8:03:00 AM 

如何更新只有日期部分的日期時間?

字段名稱是dTime。

我想將日期更新至2012年5月10日,並保持原樣。

+0

你想要做什麼類型的更新? –

回答

3
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 
+0

很好地使用插入和刪除的表格。 – gicalle

2
UPDATE YourTable 
SET YourColumn = DATEADD(MONTH,1,YourColumn) 
WHERE YourColumn = '20120410 08:03:00' 

我假設你的日期格式爲DD/MM/YYYY。如果是MM/DD/YYYY,則應改用DATEADD(DAY,1,YourColumn)

21
UPDATE 
    tableX 
SET 
    columnX = DATEADD(day, DATEDIFF(day, columnX, '20120510'), columnX) 
WHERE 
    (conditionX) ; 
+1

這絕對是最有效的解決方案。 –

1
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」。