我要的功能很简单,请问达人,这句SQL怎么写

[复制链接]
查看11 | 回复6 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
一个表person(id1,id2,id3,id4,name,email)
id1 id2 id3id4nameemail
a11 b22c33 d44中国网易@163.com
我需要把该条记录的a11变成,a11c3,也就是substr(id3,1,3)拼接到id1字段上面,请问,怎么做啊?
急急,3q!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
update person set id1=id1||substr(id3,1,3) where.....
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
update person
set id1 = id1 || substr(id3,1,3) ;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SQL> update sfhc_sjwh_log t set t.changeid=t.changeid||substr(t.sendunit,1,1) where t.changeid='01702003070902933';
update sfhc_sjwh_log t set t.changeid=t.changeid||substr(t.sendunit,1,1) where t.changeid='01702003070902933'
ORA-01401: 插入的值对于列过大
字段的位数明明是够了的
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
desc sfhc_sjwh_log
先看看
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SQL> desc sfhc_sjwh_log;
Name Type Nullable Default Comments
-------------- ------------ -------- ------- --------
CHANGEID CHAR(23)

FORMERID CHAR(18)

FORMERNAME VARCHAR2(30)

CHANGETYPE VARCHAR2(6)

CHANGECONTENTVARCHAR2(10)

CHANGETIME DATE

SENDUNIT VARCHAR2(10)

SENDTIME DATE

UNITSERIAL VARCHAR2(10)

RKHCID NUMBER(10)

CHANGERANGEVARCHAR2(2)

OPERATESTATUSCHAR(2)
00

CHANGEREASON CHAR(3)

INSERTORUPDATE NUMBER(1)

USERTYPE VARCHAR2(1) 0

QYDZ VARCHAR2(80) Y

NOWID
CHAR(18) Y

NOWNAMEVARCHAR2(30) Y

SQL>
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
因为你使用的是char类型,
所以changeid实际上后面都插入了空格填满23位,
然后连接1位,变成了24位,当然无法插入了。

update sfhc_sjwh_log t set t.changeid=t.changeid||substr(t.sendunit,1,1) where t.changeid='01702003070902933'
更改为
update sfhc_sjwh_log t set t.changeid=rtrim(t.changeid) ||substr(t.sendunit,1,1) where t.changeid='01702003070902933'
应该就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行