使用REGEXP_REPLACE确保在值之前出现“£”?

时间:2015-10-23 14:39:23

标签: sql oracle oracle-apex regexp-replace

我希望在APEX中使用REGEXP_REPLACE来修改已放入要替换的字段中的任何值,但是在前面有一个“£”符号,这可能吗?

我的专栏名称是“薪水”

PS。 oracle SQL,感谢ALOT!

编辑:对不起,我刚刚开始在大学使用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');

2 个答案:

答案 0 :(得分:3)

不要这样做 - 工资是一个数字,应该存储为一个数字 - 如果你存储一个字符串,那么你将不会(轻松)能够做数字排序的事情,因为它会尝试将其排序为字符串(即按字母数字)。

当你想输出工资时(如果你想要格式化输出):

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

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

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

答案 1 :(得分: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,'^','£');