Oracle查询在字段值的第一个位置或结束位置查找任何特殊字符
Oracle query to find any special character in first position or end position of the field value
我在 Oracle 数据库中有一个 table,在字段值的第一个和最后一个位置附加了特殊字符。我想在查询 table 时消除那些特殊字符。我使用了 INSTR 函数,但我必须使用 CASE 表达式为每个特殊字符申请。
有没有办法消除在一个镜头中只附加在第一个和最后一个位置的任何特殊字符?
我正在使用的查询如下:
情况下
INSTR(emp_address,'"')=1 然后替换((emp_address,'"', '').
.
.
.
如果匹配正则表达式模式,您可以使用正则表达式替换字符串的前导和尾随字符。例如,如果您定义的“特殊字符”不是 alpha-numeric 字符,那么您可以使用正则表达式:
^
start-of-the-string 然后
[^[:alnum:]]
任何与 POSIX alpha-numeric 字符组不匹配的单个字符
|
或
[^[:alnum:]]
任何与 POSIX alpha-numeric 字符组不匹配的单个字符 then
$
end-of-the-string.
像这样:
SELECT emp_address,
REGEXP_REPLACE(
emp_address,
'^[^[:alnum:]]|[^[:alnum:]]$'
) AS simplified_emp_address
FROM table_name
其中,对于示例数据:
CREATE TABLE table_name (emp_address) AS
SELECT 'test' FROM DUAL UNION ALL
SELECT '"test2"' FROM DUAL UNION ALL
SELECT 'Not "this" one' FROM DUAL;
输出:
EMP_ADDRESS
SIMPLIFIED_EMP_ADDRESS
test
test
"test2"
test2
Not "this" one
Not "this" one
如果您对特殊字符有更复杂的定义,请适当更改正则表达式。
db<>fiddle here
我在 Oracle 数据库中有一个 table,在字段值的第一个和最后一个位置附加了特殊字符。我想在查询 table 时消除那些特殊字符。我使用了 INSTR 函数,但我必须使用 CASE 表达式为每个特殊字符申请。 有没有办法消除在一个镜头中只附加在第一个和最后一个位置的任何特殊字符?
我正在使用的查询如下: 情况下 INSTR(emp_address,'"')=1 然后替换((emp_address,'"', ''). . . .
如果匹配正则表达式模式,您可以使用正则表达式替换字符串的前导和尾随字符。例如,如果您定义的“特殊字符”不是 alpha-numeric 字符,那么您可以使用正则表达式:
^
start-of-the-string 然后[^[:alnum:]]
任何与 POSIX alpha-numeric 字符组不匹配的单个字符|
或[^[:alnum:]]
任何与 POSIX alpha-numeric 字符组不匹配的单个字符 then$
end-of-the-string.
像这样:
SELECT emp_address,
REGEXP_REPLACE(
emp_address,
'^[^[:alnum:]]|[^[:alnum:]]$'
) AS simplified_emp_address
FROM table_name
其中,对于示例数据:
CREATE TABLE table_name (emp_address) AS
SELECT 'test' FROM DUAL UNION ALL
SELECT '"test2"' FROM DUAL UNION ALL
SELECT 'Not "this" one' FROM DUAL;
输出:
EMP_ADDRESS SIMPLIFIED_EMP_ADDRESS test test "test2" test2 Not "this" one Not "this" one
如果您对特殊字符有更复杂的定义,请适当更改正则表达式。
db<>fiddle here