【问题标题】:How to make a varchar2 field shorter in Oracle?如何在 Oracle 中缩短 varchar2 字段?
【发布时间】:2012-01-14 07:23:17
【问题描述】:

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

是否有将长度减少到 255 的 SQL 语句?我意识到数据会丢失,这是新应用程序成本的一部分。剪切应该是任意的,无论在什么情况下都只是将数据停止在 255。

【问题讨论】:

    标签: oracle


    【解决方案1】:
    update b set text2 = substr(text2,1,255);
    

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

    alter table b MODIFY "TEXT2" varchar2(255 byte);
    

    【讨论】:

    • 因为只有几行,我只会更新太大的记录...添加WHERE LENGTH(text2)>255
    • 理论问题:我很好奇这会有什么帮助。乍一看,我同意它应该。但是当我开始考虑它时,我开始怀疑。在哪里,它必须首先在每条记录上做一个长度(性能命中),因为我怀疑长度上有一个索引。然后它必须到子字符串。所以在我看来,它实际上可能会更慢。仅使用 str,它对每条记录进行一次计数,并且每次都停在 255 或字符串末尾。而长度则必须计算所有内容。然后做子串。只是思考的食物。
    • 这将取决于表上是否还有任何 UPDATE 触发器。
    • 实际上你可能想要alter table b MODIFY "TEXT2" varchar2(255 CHAR); CHAR 而不是 BYTE
    • 同意凯文。获取字符串长度所需的时间最少,但相比之下更新一行所需的工作要大得多。
    猜你喜欢
    • 2014-06-29
    • 2013-10-03
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多