数据库更新语句怎么写?

有一个表,其中有一列是时间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 ... ...)
展开
 我来答
百度网友a800768
推荐于2021-01-14 · TA获得超过1841个赞
知道大有可为答主
回答量:1928
采纳率:0%
帮助的人:1731万
展开全部
如果按你的要求需要写个存储过程来实现。麻烦。

如果按下面来做的话,会有重复值,
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)
dongfanghong_1
2010-09-11 · TA获得超过363个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:308万
展开全部
试用于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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
直男救星来了
2010-09-11 · TA获得超过673个赞
知道小有建树答主
回答量:168
采纳率:100%
帮助的人:203万
展开全部
看你的意思应该是想给表里的每条记录加一个序号,但是一个一个从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是你表的主键,或者是个值唯一的字段,能够区别每条记录的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spiderrobot
2010-09-11 · TA获得超过871个赞
知道小有建树答主
回答量:930
采纳率:0%
帮助的人:576万
展开全部
这个不需要这么麻烦,除非是必须要用存储过程来做,一句话就可以做了
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江南烟雨1830
2010-09-11
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
用update
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式