查询
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