【发布时间】: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
我使用的是 SQL Server 2008。 我在数据库中有一个日期时间 其中值为
10/4/2012 8:03:00 AM
如何只更新日期部分?
字段名称为 dTime。
我喜欢将日期更新为 2012 年 10 月 5 日,并保持时间不变。
【问题讨论】:
标签: sql-server sql-server-2008
UPDATE
tableX
SET
columnX = DATEADD( day, DATEDIFF( day, columnX, '20120510' ), columnX )
WHERE
(conditionX) ;
【讨论】:
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
【讨论】:
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 天。
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”。
【讨论】:
update tableX set dttime = CONCAT("2012-10-24 ",time(dttime)) WHERE date(dt1)='2012-05-10'
【讨论】: