如何循环更新一列数据

烂泥行天下 2011-08-29 04:48:55
各位大侠,你们。我要更新oracle数据库中,其中一张表的指定一列的值,如何循环更新呢?单独的更新是没有问题,下面我把单独更新的SQL列出来:
update uf_staffinformlogin set logintime=replace(logintime,'11-6-1','2011-06-01')
...
update uf_staffinformlogin set logintime=replace(logintime,'11-6-21','2011-06-21')
...
update uf_staffinformlogin set logintime=replace(logintime,'11-6-27','2011-06-27')


这个我现在不知道该如何写这个循环条件,麻烦各位了。。。
...全文
186 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2011-08-30
  • 打赏
  • 举报
回复
先确定表中logintime这个列是什么类型。如果是date,就没必要更新了。

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';

select logintime from uf_staffinformlogin
xiaobn_cn 2011-08-30
  • 打赏
  • 举报
回复
-- 1楼的转换字符串到日期的函数需要加上格式
UPDATE uf_staffinformlogin
set logintime= to_char(to_date(logintime,'YY-MM-DD'),'YYYY-MM-DD')
烂泥行天下 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hanzs 的回复:]

SQL code

--logintime里存日期是不是都是两位的年,就是都是 11-6-1 这样的格式吗?

--如果是,你要改成四位的年格式,改成:

update uf_staffinformlogin
set logintime=to_char(to_date('20'||logintime),'yyyy-mm-dd')

--如果是2000年之前,你就得把'20'改为'19'


……
[/Quote]

我使用你说的SQL语句了 ,但是不行呢 ,系统提示我 ora-01861:文字与格式字符串不匹配

光标一直在“||”地方闪烁,不知道为什么??
求解
hanzs 2011-08-29
  • 打赏
  • 举报
回复

--logintime里存日期是不是都是两位的年,就是都是 11-6-1 这样的格式吗?

--如果是,你要改成四位的年格式,改成:

update uf_staffinformlogin
set logintime=to_char(to_date('20'||logintime),'yyyy-mm-dd')

--如果是2000年之前,你就得把'20'改为'19'
烂泥行天下 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hanzs 的回复:]

SQL code

--不需要循环,这样就可以更新这张表的所有记录:

update uf_staffinformlogin set logintime=to_char(to_date(logintime),'yyyy-mm-dd')
[/Quote]

我使用你说的SQL语句了 ,但是不行呢 ,系统提示我 ora-01861:文字与格式字符串不匹配

这是为什么呢??
lbq794619111 2011-08-29
  • 打赏
  • 举报
回复
楼上正解
hanzs 2011-08-29
  • 打赏
  • 举报
回复

--不需要循环,这样就可以更新这张表的所有记录:

update uf_staffinformlogin set logintime=to_char(to_date(logintime),'yyyy-mm-dd')

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧