0

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

我的栏目名称是“薪水”

附言。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');
4

2 回答 2

3

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

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

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

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

SALARY                 
------------------------
          £1,234,567.89  
于 2015-10-23T15:45:43.893 回答
0

与您的示例类似,您始终可以在开头添加英镑货币符号,如下所示“^”表示 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,'^','£');
于 2015-10-23T15:18:59.570 回答