trim函数对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格式模型来不包括前导空白。

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

哪个输出:

|TRIM(BOTH'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|3|330 |3100|1

db<gt;小提琴这里

您可以使用以下语句来实现结果33,而不是TRIM

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

最新更新