【问题标题】:trim function not working on result of to_char修剪功能不适用于 to_char 的结果
【发布时间】:2021-04-01 17:31:14
【问题描述】:

查询

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 代替。

【问题讨论】:

    标签: sql oracle oracle11g oracle19c


    【解决方案1】:

    您希望使用FM 格式模型不包括前导空格。

    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;
    

    输出:

    价值 | TRIMMED_VALUE ----: | :------------ 0 | 3 | 3 30 | 3 100 | 1

    db小提琴here

    【讨论】:

      【解决方案2】:

      除了TRIM,您可以使用以下语句来获得结果 33:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2020-08-19
        • 1970-01-01
        相关资源
        最近更新 更多