Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连续时间的SQL日期更新查询_Sql_Sql Server_Date - Fatal编程技术网

连续时间的SQL日期更新查询

连续时间的SQL日期更新查询,sql,sql-server,date,Sql,Sql Server,Date,我有一个数据库,其中有一个文本格式的日期字段。 我想更新表中的一些日期。所以,基本上,当前日期应该更改为新日期,问题是我至少有1000条记录需要更新。唯一的优点是我的日期字段中的时间是连续的 我尝试了以下查询: UPDATE my_table set Date='05-10-2012 00:00:00' WHERE Date like '%04-26-2012%' 但是,它忽略了日期字段中的时间部分 为了说明我的意图 Current Date N

我有一个数据库,其中有一个文本格式的日期字段。 我想更新表中的一些日期。所以,基本上,当前日期应该更改为新日期,问题是我至少有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

那么,我如何用我想要的时间段将我的日期更新为新的日期呢

可以在update语句之前声明变量。在你出发前一分钟。然后在设置字段之前增加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

撇开所有数据类型问题不谈,现在开始

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)

那么,您是否也将时间部分更改为从某一分钟开始?您从何处获取时间部分?是的,新的时间部分应从01:19:00开始,并且每个记录的时间应增加1分钟,其中[Date]如“%string%”噢,天哪……请了解为什么不应使用[Date]如“%string%”:或者,如果您的日期列被存储为字符串,请停止这样做。这里的主题处理得更好:您是否测试过像“%04-26-2012%”这样的日期?反对什么数据类型?OP说日期是varchar…只是从他的示例中复制的不确定我是否同意文本格式的日期字段必然意味着它是一个varchar列。我的解释是一个日期列,当他选择*时,他看到的是如图所示。另外,请不要转换没有长度的VARCHAR!此外,应该注意的是,对于未来的观众来说,这将不会处理多年的范围,而字符串日期是给定格式的,尽管它可以解决定义的问题。