【问题标题】:Replace Function on Select Statement, delete (-)替换 Select 语句上的函数,删除 (-)
【发布时间】:2021-04-30 18:06:48
【问题描述】:

我在存储过程中有一个查询,试图向该表中插入一些金额:

KPI AMOUNT
First -
Second -100
Third 200

我正在尝试清空所有“-”记录,但是当我替换它时,它也会删除数字上的负号。

SELECT
    kpi,
    TO_NUMBER (REPLACE (amount, '-', NULL)),
FROM dual
KPI AMOUNT
First null
Second 100
Third 200

还有什么办法可以避免这种情况发生并导致这种情况发生吗?

KPI AMOUNT
First null
Second -100
Third 200

谢谢!

【问题讨论】:

  • 金额是文本字段吗?
  • @June7 from 'orginal' source 是的,我将它转换为 ODS 上的_number。
  • 为什么在 KPI 字段上显示 Replace 而不是 AMOUNT?
  • @June7 呃,我的错,已经编辑过了,感谢您的观察。

标签: sql oracle plsql


【解决方案1】:

NULLIF 可用于替换整个值(不仅仅是字符串中的字符),如果这些值匹配的话。

SELECT
  KPI,
  NULLIF(amount, '-')  AS amount  -- If the amount is '-' return a NULL instead
FROM
  yourTable

【讨论】:

    【解决方案2】:

    我可以想到其他答案中未提及的其他两种简单方法来清理下面看到的- 值。我建议使用VALIDATE_CONVERSION 方法,因为这也可以处理AMOUNT 列中的任何空格。

    WITH
        sample_data (KPI, AMOUNT)
        AS
            (SELECT 'First', '-' FROM DUAL
             UNION ALL
             SELECT 'Second', '-100' FROM DUAL
             UNION ALL
             SELECT 'Third', '200' FROM DUAL)
    SELECT kpi,
           amount,
           RTRIM (amount, '-')                                                    amt1,
           CASE validate_conversion (amount AS NUMBER) WHEN 1 THEN amount END     AS amt2
      FROM sample_data;
    

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 2020-06-27
      • 2021-09-05
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      相关资源
      最近更新 更多