我有一个带有文本格式的日期字段的数据库。 我想更新表格中的一些日期。所以,基本上,当前日期应该更改为新日期,事情是我至少有1000条需要更新的记录。唯一的好处是我的日期字段中的时间是顺序的。
我尝试了以下查询:
UPDATE my_table set Date='05-10-2012 00:00:00' WHERE Date like '%04-26-2012%'
但是,它忽略了我的日期字段中的时间部分。
说明我的意图
Current Date New Date
04-26-2012 02:45:00 05-10-2012 01:19:00
04-26-2012 02:47:00 05-10-2012 01:20:00
04-26-2012 02:48:00 05-10-2012 01:21:00
04-26-2012 02:49:00 05-10-2012 01:22:00
04-26-2012 02:50:00 05-10-2012 01:23:00
那么,如何使用我想要的时间段将我的日期更新到新日期?
答案 0 :(得分:1)
您可以在更新语句之前声明变量。到你开始时间前一分钟。然后在设置字段之前在update语句中增加变量。我在下面粘贴了一个例子。
declare @testData table (oldDate datetime)
insert into @testData (oldDate) values ('04-26-2012 02:45:00')
insert into @testData (oldDate) values ('04-26-2012 02:47:00')
insert into @testData (oldDate) values ('04-26-2012 02:48:00')
insert into @testData (oldDate) values ('04-26-2012 02:49:00')
insert into @testData (oldDate) values ('04-26-2012 02:50:00')
-- Set a default start date.
declare @newStartDate as dateTime
set @newStartDate = '05-10-2012 01:18:00'
update @testData set @newStartDate = DATEADD(MINUTE,1,@newStartDate),
oldDate = @newStartDate
select * from @testData
答案 1 :(得分:1)
除了所有数据类型问题,这里你去...
declare @from datetime, @thru datetime, @dateSeed datetime;
set @from = '4/26/2012';
set @thru = '4/27/2012';
set @dateSeed = '5/10/2012 1:19:00';
with cte as (
select
Date,
rn = row_number() over(order by Date)
from
my_table
where
Date >= @from and Date < @thru
--Date like '%04-26-2012%'
)
update cte set
--110 = USA m/d/y format + 108 = hh:mm:ss 24 hour format
--Date = convert(varchar(10), dateadd(mi, rn-1, @dateSeed), 110) + ' ' + convert(varchar(8), dateadd(mi, rn-1, @dateSeed), 108)
Date = dateadd(mi, rn-1, @dateSeed)