2012-08-13 119 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