我有一个表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”末尾的正确方法吗?
答案 0 :(得分:2)
rpad()
应该可以,但是您的else
可能会引起问题:
select (case when length(lname) < 2 then rpad(lname, 2)
else lname
end) as lname
from TEST_TABLE;
答案 1 :(得分:0)
在列上使用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