带有NULL值的DECODE

时间:2013-08-22 18:04:24

标签: sql oracle

我想在值NULL

时插入ZEROS或Spaces

我尝试使用小柱长并且工作正常:

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('DECODE(MDSE_CD,NULL,''000'',LPAD(TO_NUMBER(MDSE_CD,''3'','' ''))');

但是如何执行大约400列长度的第二个查询:

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('DECODE(MDSE_CD,NULL,''see notes below'',LPAD(TO_NUMBER(MDSE_CD,''400'','' ''))');

注意:当列为NULL

时,如何插入400个零或空格

2 个答案:

答案 0 :(得分:2)

CREATE TABLE my_test( val VARCHAR2(500));

INSERT INTO my_test
SELECT TO_CHAR(NVL(TO_CHAR(val), rpad(NVL(val,'0'), 400, '0')))
FROM
     (WITH t(val) AS
     (SELECT '1' FROM dual
     UNION
     SELECT NULL FROM dual
     )
SELECT * FROM t
     );

SELECT * FROM my_test;
val
--
1
00000

答案 1 :(得分:1)

由于DECODE我假设Oracle ......

在Oracle中获得400个零:

LPAD('0', 400, '0')

第三个参数是要填充的内容;在这种情况下为零。

在Oracle中获得400个空格:

LPAD(' ', 400)

由于字符串都是相同的字符,您还可以使用RPAD