【问题标题】:To add space to a VARCHAR column value to ensure a minimum length of 2向 VARCHAR 列值添加空间以确保最小长度为 2
【发布时间】:2019-05-20 11:01:40
【问题描述】:

我有一个表 TEST_TABLE 有一个名为 LNAME 的列具有 VARCHAR2 数据类型。 要求是 LNAME 的值必须至少为 2 个字符。

1- 创建表

CREATE TABLE TEST_TABLE
(
  LNAME VARCHAR2(4000)
);

2 - 插入长度为 1 的记录

INSERT INTO TEST_TABLE (LNAME) VALUES ('A');

LNAME 的值为 'A'。 我需要将此值转换为'A '。 [添加空格以确保满足最小长度条件]。

注意:需要使用 CASE...WHEN 来完成

我的尝试:

select
CASE
WHEN LENGTH(LNAME) < 2
THEN RPAD(LNAME,2)
ELSE ''
END LNAME
from TEST_TABLE;

使用以下查询检查长度:

select LENGTH(LNAME) from TEST_TABLE;

长度返回 1 而不是预期的 2。 RPAD 是将空格附加到“A”末尾的正确方法吗?

【问题讨论】:

  • 你想作弊吗?!? "要求 LNAME 的值必须至少为 2 个字符。"
  • 为什么要专门加空格。你不应该操纵数据
  • @VenkataramanR 数据处理是我进一步使用我的数据进行进一步操作所需要的。
  • @jarlh 不,先生,不幸的是,我不想作弊。请原谅我用词不当。

标签: sql oracle


【解决方案1】:

rpad() 应该可以工作,但您的 else 可能会导致问题:

select (case when length(lname) < 2 then rpad(lname, 2)
             else lname
        end) as lname
from TEST_TABLE;

【讨论】:

    【解决方案2】:

    在列上使用CHECK 约束:

    CREATE TABLE TEST_TABLE
    (
      LNAME VARCHAR2(4000) CONSTRAINT TEST_TABLE__LNAME__MINLENGTH2 CHECK ( LENGTH( LNAME ) >= 2 )
    );
    

    如果值太短,您可以在插入语句中使用RPAD

    INSERT INTO TEST_TABLE ( LNAME ) VALUES ( RPAD( 'A', 2 ) );
    

    或者您可以使用MERGE 声明:

    MERGE INTO TEST_TABLE t
    USING ( SELECT 'A' AS value FROM DUAL ) v
    ON ( 0 = 1 )
    WHEN NOT MATCHED THEN
      INSERT ( LNAME ) VALUES ( CASE WHEN LENGTH( v.value ) < 2 THEN RPAD( v.value, 2 ) ELSE v.value END );
    

    或匿名 PL/SQL 块:

    DECLARE
      value TEST_TABLE.LNAME%TYPE := 'B';
    BEGIN
      INSERT INTO test_table ( lname ) VALUES ( CASE WHEN LENGTH( value ) < 2 THEN RPAD( value, 2 ) ELSE value END );
    END;
    /
    

    db小提琴here

    如果您想更改现有数据,请使用UPDATE 语句:

    UPDATE test_table
    SET    lname = RPAD( lname, 2 )
    WHERE  LENGTH( lname ) < 2
    

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多