【问题标题】:using REGEXP_REPLACE to make sure a "£" appears before the value?使用 REGEXP_REPLACE 确保值之前出现“£”?
【发布时间】:2016-01-23 03:39:22
【问题描述】:

我希望在 APEX 中使用 REGEXP_REPLACE 来更改已放入字段中的任何值以替换为相同的值,但在其前面带有“£”符号,这可能吗?

我的栏目名称是“工资”

ps。 oracle SQL,非常感谢!

编辑:对不起,我刚开始在大学使用 SQL,我真的不知道我在做什么。我想要一个名为“salary”的列,我想要一个约束和触发器,这样当在字段中输入一个静态数值时,例如 1000,约束会看到这个并且触发器将其更改为 £1000,类似我设法用一个电话号码做了什么:

表:

contact_no       VARCHAR2(20) 
              CONSTRAINT students_contact_no_chk CHECK (REGEXP_LIKE(contact_no, '\(([[:digit:]]{5})\)([[:digit:]]{6})'))
              CONSTRAINT students_contact_no_nn NOT NULL,

触发器:

:NEW.contact_no := REGEXP_REPLACE(:NEW.contact_no, '[^[:digit:]]', '');
  :NEW.contact_no := REGEXP_REPLACE(:NEW.contact_no,
                   '([[:digit:]]{5})([[:digit:]]{6})', '(\1) \2');

【问题讨论】:

  • 请编辑您的问题并提供一些您想要做什么的示例。正如您所描述的问题,regexp_replace() 似乎没有必要。
  • 我尽力了!对不起,高级
  • 提示:||是您用来连接两个字符串的方法。工资列的数据类型是什么?如果我是你,我不会把英镑符号作为工资的一部分。我要么重新标记(或评论)该列以指示salary_in_gbp,确保它是NUMBER 数据类型,或者有一个单独的列指示salary 列的货币。这样,您可以将薪水存储在数字列中,这意味着您不必担心验证该列以确保它实际上是一个数字,并且您仍然可以保留货币信息。
  • 在薪水前面显示货币符号将成为显示问题。

标签: sql oracle oracle-apex regexp-replace


【解决方案1】:

不要这样做 - 薪水是一个数字,应该存储为一个数字 - 如果你将它存储为一个字符串,那么你将无法(轻松)执行数字排序之类的操作,因为它会尝试对其进行排序作为一个字符串(即字母数字)。

当你想输出工资时,你可以这样做(如果你想格式化输出):

SELECT TO_CHAR( salary, 'L99,999,999.00' ) AS salary
FROM   table_name;

哪个(取决于您的NLS_CURRENCY 设置)将输出:

SALARY                 
------------------------
          £1,234,567.89  

【讨论】:

    【解决方案2】:

    与您的示例类似,您始终可以在开头添加英镑货币符号,如下所示“^”表示 regexp_replace 中的行首

    -- assuming salary is varchar2 field
    -- and it's already verified for digits only
    -- if salary is 1234 then it will make it to £1234
    :NEW.salary := regexp_replace(:NEW.salary,'^','£');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-27
      • 2017-11-07
      • 2015-08-07
      • 1970-01-01
      • 2017-11-14
      • 2021-11-19
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多