如何在Oracle中缩短varchar2字段?

use*_*758 10 oracle

我在一个表中的字段是varchar2,4000字节.有超过50000行.并非所有行都包含此字段中的数据.很少有数据字段超过255个字节,但有些是4000.要将表放在新的应用程序中,我需要将字段缩短为255个字节.

是否有一个SQL语句将长度减少到255?我意识到数据将丢失,这是新应用程序成本的一部分.剪切应该是任意的,只要在255处停止数据,无论情况如何.

xQb*_*ert 30

update b set text2 = substr(text2,1,255);
Run Code Online (Sandbox Code Playgroud)

然后alter table将列长度设置为255:

alter table b MODIFY "TEXT2" varchar2(255 byte);
Run Code Online (Sandbox Code Playgroud)

  • 由于只有几行,我只会更新太大的记录...添加`WHERE LENGTH(text2)> 255 (8认同)
  • 实际上你可能想要`alter table b MODIFY"TEXT2"varchar2(255 CHAR);`CHAR not BYTE (3认同)
  • woudl依赖于表中是否有任何UPDATE触发器. (2认同)
  • 同意凯文.获取字符串长度所需的时间很短,但相比之下更新行所需的工作量要大得多. (2认同)