2012-08-13 122 views
1

我有文本格式的日期字段的数据库。 我想更新我的表中的一些日期。所以,基本上,当前的日期应更改为新的日期,事情是,我至少有1000条记录需要被更新。唯一的优点是我的日期字段中的时间是连续的。SQL日期更新查询

我尝试以下查询:

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

这样,你是不是也改变了时间部分从某一分钟开始? – dotjoe 2012-08-13 19:40:40

+0

你从哪里得到时间部分? – 2012-08-13 19:41:15

+0

是的,新的时间部分应该从01:19:00开始,它应该增加1分钟的每个记录 – 2012-08-13 19:42:26

回答

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

所有数据类型的问题不谈,这里亚去...

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) 
+1

你测试过'日期如'%04-26-2012%'?反对什么数据类型? – 2012-08-13 20:27:47

+0

OP说'Date'为varchar ......从他的例子只是复制 – dotjoe 2012-08-13 20:30:05

+0

不知道我同意“在文本格式的日期字段”不一定意味着它是一个VARCHAR列。我的解释是一个日期列,当他做SELECT *时他看到的是他所看到的。 – 2012-08-13 20:31:44