RegExp_Replace PLSQL 中只有数字词
RegExp_Replace only numeric words in PLSQL
我需要帮助将数字词替换为 null。
示例:
- 达斯顿 0989 LLC
- Dustun_0989有限责任公司
- 457 杜斯顿有限责任公司
- 457_Dustun有限责任公司
- 334 邓禄普 987
输出:
- 杜斯顿有限责任公司
- Dustun_0989有限责任公司
- 杜斯顿有限责任公司
- 457_Dustun有限责任公司
- 邓禄普
这里不需要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(...))
你可以用正则表达式来完成。例如,像这样:
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) 是等同于 \b 的 Oracle 正则表达式,如 Oracle REGEXP_LIKE and word boundaries
中所述
其中:
- (^|\s|\W) 是行首、空白 space 或非单词字符。
- (\s|\d)+ 是一个或多个数字和 spaces 的组合。
- ($|\s|\W) 是行尾、空白 space 或非单词字符。
这也行
select regexp_replace(text,'[0-9]') from dual
我需要帮助将数字词替换为 null。
示例:
- 达斯顿 0989 LLC
- Dustun_0989有限责任公司
- 457 杜斯顿有限责任公司
- 457_Dustun有限责任公司
- 334 邓禄普 987
输出:
- 杜斯顿有限责任公司
- Dustun_0989有限责任公司
- 杜斯顿有限责任公司
- 457_Dustun有限责任公司
- 邓禄普
这里不需要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(...))
你可以用正则表达式来完成。例如,像这样:
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) 是等同于 \b 的 Oracle 正则表达式,如 Oracle REGEXP_LIKE and word boundaries
中所述其中:
- (^|\s|\W) 是行首、空白 space 或非单词字符。
- (\s|\d)+ 是一个或多个数字和 spaces 的组合。
- ($|\s|\W) 是行尾、空白 space 或非单词字符。
这也行
select regexp_replace(text,'[0-9]') from dual