0

我需要帮助将数字单词替换为 null。

例子:

  1. 达斯顿 0989 有限责任公司
  2. Dustun_0989 LLC
  3. 第457章
  4. 457_Dustun LLC
  5. 334 邓禄普 987

输出:

  1. 达斯顿有限责任公司
  2. Dustun_0989 LLC
  3. 达斯顿有限责任公司
  4. 457_Dustun LLC
  5. 邓禄普
4

3 回答 3

1

你可以用正则表达式来完成它。例如,像这样:

WITH the_table AS (SELECT 'Dustun 0989 LLC' field FROM dual
                   UNION
                   SELECT 'Dustun_0989 LLC' field FROM dual
                   UNION 
                   SELECT '457 Dustun LLC' field FROM dual
                   UNION
                   SELECT '457_Dustun LLC' field FROM dual
                   UNION
                   SELECT 'Dunlop 987' field FROM dual
                   UNION
                   SELECT '222 333 ADIS GROUP 422 123' field FROM dual)                   
SELECT field, TRIM(REGEXP_REPLACE(field,'((^|\s|\W)(\d|\s)+($|\s|\W))',' '))
FROM the_table

请注意,(^|\s|\W) 和 ($|\s|\W) 是 Oracle 正则表达式,等同于 \b,如Oracle REGEXP_LIKE 和单词边界中所述

在哪里:

  • (^|\s|\W) 是行首、空格或非单词字符。
  • (\s|\d)+ 是一个或多个数字和空格的组合。
  • ($|\s|\W) 是行尾、空格或非单词字符。
于 2015-10-26T07:28:12.983 回答
0

这里不需要 PL/SQL,一个简单的 SQL 语句就可以了:

regexp_replace(the_column, '(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)', ' ')

这会替换两个空格或值开头的数字之间的任意数量的数字,然后是空格或空格,然后是输入值末尾的数字。

以下:

with sample_data (the_column) as 
(
    select 'Dustun 0989 LLC' from dual union all
    select 'Dustun_0989 LLC' from dual union all
    select '457 Dustun LLC' from dual union all
    select '457_Dustun LLC' from dual union all
    select '334 Dunlop 987' from dual
)
select regexp_replace(the_column, '(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)', ' ') as new_value
from sample_data

将输出:

NEW_VALUE      
---------------
Dustun LLC     
Dustun_0989 LLC
 Dustun LLC    
457_Dustun LLC 
 Dunlop        

要摆脱前导(或尾随)空格,请使用以下trim函数:trim(regexp_replace(...))

于 2015-10-26T07:27:05.020 回答
0

这也可以

select regexp_replace(text,'[0-9]') from dual
于 2015-10-26T08:15:33.887 回答