数据库更新语句怎么写?
有一个表,其中有一列是时间column_time,现在新增了一个字段column_no,想按列column_time的升序来更新字段column_no,更新语句可以怎么写...
有一个表,其中有一列是时间column_time,现在新增了一个字段column_no,想按列column_time的升序来更新字段column_no,更新语句可以怎么写?
例如,
column_time column_no
2009-01-01
2009-01-02
2009-01-03
上面对应的column_no分别是1,2,3这样
我是用oracle的,
好像用这个语句也能更新
UPDATE table_name t1
SET t1.column_no = (SELECT row_sn FROM (
SELECT t2.*,row_number() OVER(ORDER BY t2.column_date) row_sn
FROM table_name t2
) tmp
WHERE tmp.row_sn >= 1 AND tmp.row_sn <= 300
AND t1.column_a = tmp.column_a
and t1.column_b = tmp.column_b
and ... ...) 展开
例如,
column_time column_no
2009-01-01
2009-01-02
2009-01-03
上面对应的column_no分别是1,2,3这样
我是用oracle的,
好像用这个语句也能更新
UPDATE table_name t1
SET t1.column_no = (SELECT row_sn FROM (
SELECT t2.*,row_number() OVER(ORDER BY t2.column_date) row_sn
FROM table_name t2
) tmp
WHERE tmp.row_sn >= 1 AND tmp.row_sn <= 300
AND t1.column_a = tmp.column_a
and t1.column_b = tmp.column_b
and ... ...) 展开
5个回答
展开全部
如果按你的要求需要写个存储过程来实现。麻烦。
如果按下面来做的话,会有重复值,
update 表名 set column_no=datepart(day,column_time)
建议你把column_no 按如20090101来更新较方便,这样能与column_time能对应上。
update 表名 set column_no=(datepart(year,column_time)*100+datepart(month,column_time))*100+datepart(day,column_time)
如果按下面来做的话,会有重复值,
update 表名 set column_no=datepart(day,column_time)
建议你把column_no 按如20090101来更新较方便,这样能与column_time能对应上。
update 表名 set column_no=(datepart(year,column_time)*100+datepart(month,column_time))*100+datepart(day,column_time)
展开全部
试用于sql2000,及其高版本的数据库:
--创建表
create table #aa
(
create_time datetime,
ids int
)
go--插入测试数据
declare @a int
set @a=10
while @a>0
begin
insert into #aa(create_time)
select getdate()-@a
set @a=@a-1
end
select create_time,identity(int,1,1) theid into #b from #aa order by create_time
update #aa set ids=b.theid from #aa a,#b b where a.create_time=b.create_time
select * from #aa
--创建表
create table #aa
(
create_time datetime,
ids int
)
go--插入测试数据
declare @a int
set @a=10
while @a>0
begin
insert into #aa(create_time)
select getdate()-@a
set @a=@a-1
end
select create_time,identity(int,1,1) theid into #b from #aa order by create_time
update #aa set ids=b.theid from #aa a,#b b where a.create_time=b.create_time
select * from #aa
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你的意思应该是想给表里的每条记录加一个序号,但是一个一个从1、2、3....开始改很麻烦,所有想用SQL语句来实现。本人能力有限,只能提供下面两种我认为可行的解决思路:
1、数据库结合编程语言
将数据按column_time升序查询出,然后在程序的while循环中使用update语句来更新。
2、使用存储过程
CURSOR mycursor FOR SELECT column_time,column_no FROM tb_you ORDER BY column_time
OPEN mycursor
DECLARE @id VARCHAR(10),@index INT
SET @index=1
FETCH NEXT INTO @id,@index FROM mycursor
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE tb_you SET column_no=@index WHERE column_id=@id
SET @index=@index+1
FETCH NEXT INTO @id,@index FROM mycursor
END
CLOSE mycursor
DEALLOCATE mycursor
其中column_id是你表的主键,或者是个值唯一的字段,能够区别每条记录的
1、数据库结合编程语言
将数据按column_time升序查询出,然后在程序的while循环中使用update语句来更新。
2、使用存储过程
CURSOR mycursor FOR SELECT column_time,column_no FROM tb_you ORDER BY column_time
OPEN mycursor
DECLARE @id VARCHAR(10),@index INT
SET @index=1
FETCH NEXT INTO @id,@index FROM mycursor
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE tb_you SET column_no=@index WHERE column_id=@id
SET @index=@index+1
FETCH NEXT INTO @id,@index FROM mycursor
END
CLOSE mycursor
DEALLOCATE mycursor
其中column_id是你表的主键,或者是个值唯一的字段,能够区别每条记录的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不需要这么麻烦,除非是必须要用存储过程来做,一句话就可以做了
SQL> create table t1(riqi date) ;
Table created.
SQL> insert into t1 values(sysdate) ;
1 row created.
SQL> insert into t1 values(sysdate-1) ;
1 row created.
SQL> insert into t1 values(sysdate-2) ;
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from t1 ;
RIQI
---------
11-SEP-10
10-SEP-10
09-SEP-10
SQL> alter table t1 add column_no number ;
Table altered.
SQL> merge into t1 using (select rownum rn,riqi from t1 order by riqi) t on (t.r
iqi = t1.riqi)
2 when matched then update set t1.column_no=t.rn
3 when not matched then insert values(t.riqi,t.rn) ;
3 rows merged.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> select * from t1 ;
RIQI COLUMN_NO
--------- ----------
11-SEP-10 1
10-SEP-10 2
09-SEP-10 3
SQL> create table t1(riqi date) ;
Table created.
SQL> insert into t1 values(sysdate) ;
1 row created.
SQL> insert into t1 values(sysdate-1) ;
1 row created.
SQL> insert into t1 values(sysdate-2) ;
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from t1 ;
RIQI
---------
11-SEP-10
10-SEP-10
09-SEP-10
SQL> alter table t1 add column_no number ;
Table altered.
SQL> merge into t1 using (select rownum rn,riqi from t1 order by riqi) t on (t.r
iqi = t1.riqi)
2 when matched then update set t1.column_no=t.rn
3 when not matched then insert values(t.riqi,t.rn) ;
3 rows merged.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> select * from t1 ;
RIQI COLUMN_NO
--------- ----------
11-SEP-10 1
10-SEP-10 2
09-SEP-10 3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |