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