Oracle修剪字符串内部的空白

Ale*_*lex 9 sql oracle whitespace removing-whitespace

我在我的系统中将电话号码存储为VARCHAR2,以允许用户在他们选择的电话号码前面输入"+"字符.

我的正则表达式完美地允许这一点,但是当在数据库中存储数字时,我想要去除用户可能输入的所有空格.

我的正则表达式允许以下格式

+4470123456789
+447 0123456789
+447 01234 56789
01234567890
01234 567890
01234 567 890
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过不让用户在他们的数字中添加任何空格来解决我的问题,但我从个人经验中知道,由于客户端的一些愚蠢的格式化而导致验证错误是多么令人沮丧.我已经尝试在我的INSERT/UPDATE触发器上使用TRIM函数但我已经意识到仅限于前面和尾随空格,Oracle中是否有任何其他函数可以使用它来删除内部空格?或者我是否需要编写自己的函数来执行此操作?

任何指针都将非常感激.

Ren*_*ger 31

你想试试replace (telno, ' ', '').


小智 7

更好的方法是使用正则表达式删除字符串中的所有空格

SQL> with t as (
    select 'AAA    BBB CCC' col from dual union
    select 'DDDD EEE     F' col from dual 
    )
    --
    -- actual query:
    --
    select regexp_replace(col, '[[:space:]]+', chr(32)) col
    from   t;
Run Code Online (Sandbox Code Playgroud)

科尔

AAA BBB CCC DDDD EEE F

  • 为什么你建议正则表达式比replace()更好?一般来说,正则表达式处理对 CPU 的消耗要大得多。 (2认同)