trim 函数无法处理 to_char 的结果

trim function not working on result of to_char

查询

SELECT TRIM(BOTH '0' FROM  '003') FROM DUAL;

给出了预期的结果 3 但查询:

select TRIM(BOTH '0' from TO_CHAR(3,'000')) from dual;

给出 003

我需要将结果作为第一个查询 ('3'),但我还需要 'TO_CHAR'(我正在使用它从 NUMBER 列创建虚拟列)。

我不知道为什么以及如何修复它。 另外,我不能改用 regex_replace。

您想使用 FM 格式模型以不包括前导白色 space。

SELECT TRIM(BOTH '0' from TO_CHAR(3,'FM000'))
FROM   DUAL;

输出:

| TRIM(BOTH'0'FROMTO_CHAR(3,'FM000')) |
| :---------------------------------- |
| 3                                   |

如果您想要一个生成的列,那么:

CREATE TABLE table_name (
  value         NUMBER,
  trimmed_value VARCHAR2(10)
                GENERATED ALWAYS AS (TRIM(BOTH '0' FROM TO_CHAR(value, 'FM000')))
);

INSERT INTO table_name ( value )
SELECT   0 FROM DUAL UNION ALL
SELECT   3 FROM DUAL UNION ALL
SELECT  30 FROM DUAL UNION ALL
SELECT 100 FROM DUAL;

然后:

SELECT *
FROM   table_name;

输出:

VALUE | TRIMMED_VALUE
----: | :------------
    0 | null         
    3 | 3            
   30 | 3            
  100 | 1            

db<>fiddle here

而不是 TRIM,您可以使用以下语句获得结果 33:

select substr (00033,instr(000,-1))from dual