1

テキスト形式の日付フィールドを持つデータベースがあります。テーブルの日付の一部を更新したいと考えています。したがって、基本的に、現在の日付は新しい日付に変更する必要があります。つまり、更新する必要があるレコードが少なくとも 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

では、必要な時間セクションで日付を新しい日付に更新するにはどうすればよいですか?

4

2 に答える 2

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)
于 2012-08-13T19:57:36.037 に答える
1

update ステートメントの前に変数を宣言できます。開始時間の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
于 2012-08-13T19:51:25.123 に答える