永发信息网

SQL语句时间批量修改

答案:4  悬赏:20  手机版
解决时间 2021-03-24 06:07
SQL语句时间批量修改
最佳答案
用一条语句搞不出来,我给你想了个办法,不过我的数据字段不是日期型,是字符串型的。

declare @maxdate varchar(10),@dt varchar(10)
select @maxdate=max(thetime) from t2
set @dt = convert(varchar(10),dateadd(day,1,convert(datetime,@maxdate)),102)

update t2 set nexttime=isnull(

(select min(thetime) from t2 tmp where tmp.thetime > t.thetime )
,@dt)
from t2 t

update t2 set thetime = nexttime
////////////////////////////////////

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t2]
GO

CREATE TABLE [dbo].[t2] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[event] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[thetime] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[nexttime] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

此外,我在表里加了一个字段,nexttime,先把下一条数据的日期查出来,放到这个字段,然后再更新。

/////////////////////////////////

我又试了一下把time变为日期类型,代码更简单,不用转换了。
declare @maxdate datetime
select @maxdate=max(thetime) from t2
set @maxdate=dateadd(day,1,@maxdate)
update t2 set nexttime=isnull(

(select min(thetime) from t2 tmp where tmp.thetime > t.thetime )
,@maxdate)
from t2 t
update t2 set thetime=nexttime

你的问题,实际就是要把当前的时间变为下一条的时间,那么只要取比当前时间大的时间里,最小的那条的记录就行了。不过这样取最后一条有点问题,因为没有比他大的时间了,因此需要特别处理一下。

我试验了,可行。不过以上代码,你可能要分别执行,或者放入一个存储过程,或者函数里,总之,一条语句不容易搞定。
全部回答
一个sql语句是实现不的了,除非写存储过程啦。
办法肯定是有的,就是LZ 描述的不清楚。
你的表 索引了没? 什么是【后面的那条记录】,是排过序的? 怎么才算后面。 还有你举得例子也不太好,
如果把【数据 eat 2010/8/6】这条数据中的时间改为2010/8/23后呢?改为很久以前呢?很久以后的呢? 是算修改前的后面,还是修改后的后面?
问问题前要自己先思考好了,还要让我来补充问题。
你的需求需要通过存储过程或是触发器才能实现
下面是我的一些想法,楼主可以参考下(有局限性,如果时间不唯一,就会出问题)
--对需要的事件做时间更新
update log_table t set t='2010/8/9'
where t.event='eat' and t.time='2010/8/6';
--取得所有需要做时间顺延的事件
insert into event_1
select t.event from log_table t where t.time>'2010/8/6' and t.event!='eat' order by t.time;
--取得所有需要做时间顺延的事件 原对应的时间
insert into time_1
select t.time from log_table t where t.time>'2010/8/6' and t.event!='eat' order by t.time;
--删除最小的时间
delete from time_1 t where t.time=(select min(time) from time_1);
--增加最后一天对应的时间
insert into time_1 select max(time)+1 days from time_1;--(DB2可以实现,其他没试过)
--删除需要做时间顺延的数据
delete from log_table t where t.time>'2010/8/6' and t.event!='eat'
--插入需要做时间顺延的数据
insert into log_table values(select event from event_1,select time from time_1);
希望对你有帮助,共同进步
Best Regards!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
生料酒曲配方是什么?告告我,急!
乘坐松重线公交车从醉白池站到洞泾轻轨站多少
接待顾客的开头语有哪些`?
王氏特香包NO.1怎么去啊,有知道地址的么
在横线里填上“>”“<”或“=”.5分______
京城81号电影主要说了什么
解答题(1)消化系统由________和________组
关于心灵钥匙的句子,名言:勤奋是开启知识大门
打开串口工具SSCOM.exe时会出现一个错误提示
联想笔记本电脑显示0b c7是怎么了?
耳朵黑的鼻子黑的宠物狗 这什么狗
阅读理解Oneofthemostdifficultproblems
今液延时喷剂效果怎么样 延时喷剂怎么区分好
小意意面披萨(浦口店)地址有知道的么?有点事
张和淡如何连起来给孩子起名
推荐资讯
已知A(-3,2),B(2,3),则丨AB丨=()
C语言怎么取CPU的各项信息?
喳组词有哪些,叽喳叽喳同类成语有关声音有哪
dota imba 有一个命令是可以自己选英雄但其他
玉泉村怎么去啊,有知道地址的么
癌症的根本原因,红军长征的直接原因和根本原
港闸区公共法律服务中心这个地址在什么地方,
环氧化苯并芘本身具有毒性吗?
为什么你暗恋的女生同意你加她的QQ但过一段时
属于南方的城市有哪些,在中国地方、那些地方
请问一下淘宝店铺因为:不符合淘宝认证要求。
联通3GC套餐要是在外地打电话多少钱一分钟
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?