pl/sql使用正则表达式有条件地替换表中字段的字符
使用ORACLE sql developer 我有:pl/sql使用正则表达式有条件地替换表中字段的字符,sql,regex,oracle,Sql,Regex,Oracle,使用ORACLE sql developer 我有: 字段ID 1:'006789' 字段ID 2:'026789' 字段ID 3:'126789' 我想要: 字段ID 1:'6789' 字段ID 2:'26789' 字段ID 3:'126789' 这在“EMPLOYEES”表中 我想做这样的事情 begin if FIELD_ID is like '00%' then update EMPLOYEES set FIELD_ID = %s/\%1c..// el
字段ID 1:'006789'
字段ID 2:'026789'
字段ID 3:'126789' 我想要:
字段ID 1:'6789'
字段ID 2:'26789'
字段ID 3:'126789' 这在“EMPLOYEES”表中 我想做这样的事情
begin
if FIELD_ID is like '00%' then
update EMPLOYEES
set FIELD_ID = %s/\%1c..//
elseif FIELD_ID is like '0%' then
update EMPLOYEES
set FIELD_ID = %s/\%1c.//
endif;
我对程序和正则表达式真的很陌生(显然) 如果需要从字符串中删除前导或尾随字符,则不需要正则表达式,修剪函数就足够了。在甲骨文中,有 有三个功能,和 回答你的问题
ltrim(field_id,'0')
或
应该有用
另外,请注意,TRIM和LTRIM/RTRIM之间存在细微差异。TRIM只能使用一个TRIM字符,而RTRIM/LTRIM可以使用多个字符。如果需要从字符串中删除前导或尾随字符,则不需要正则表达式,TRIM函数就足够了。在甲骨文中,有 有三个功能,和 回答你的问题
ltrim(field_id,'0')
或
应该有用
另外,请注意,TRIM和LTRIM/RTRIM之间存在细微差异。TRIM只能使用一个TRIM字符,而RTRIM/LTRIM可以使用多个字符。您可以使用一条update语句来完成,如
UPDATE employees set field_id = ltrim(field_id, '0');
你可以用一个update语句来实现,比如
UPDATE employees set field_id = ltrim(field_id, '0');
不确定为什么要使用RegExp,但如果只需要从字符串中删除前导字符和尾随字符,Oracle具有修剪功能 TRIM(来自'123Tech111'的两个'1'将返回'23Tech'
不确定为什么要使用RegExp,但如果只需要从字符串中删除前导字符和尾随字符,Oracle具有修剪功能 TRIM(来自'123Tech111'的两个'1'将返回'23Tech'
我意识到这很旧,但另一个选项(因为源数据是一个带前导零的数字)可以将字符串转换为数字,然后再转换回类似以下内容的字符串:
to_char(to_number(field_id))
下面是一个例子:
WITH TST_DATA AS (
SELECT '006789' FIELD_ID FROM DUAL UNION ALL
SELECT '026789' FIELD_ID FROM DUAL UNION ALL
SELECT '126789' FIELD_ID FROM DUAL
)
SELECT TO_CHAR(TO_NUMBER(FIELD_ID)) FIELD_ID
FROM TST_DATA
;
FIELD_ID
6789
26789
126789
我意识到这很旧,但另一个选项(因为源数据是一个带前导零的数字)可以将字符串转换为数字,然后再转换回类似以下内容的字符串:
to_char(to_number(field_id))
下面是一个例子:
WITH TST_DATA AS (
SELECT '006789' FIELD_ID FROM DUAL UNION ALL
SELECT '026789' FIELD_ID FROM DUAL UNION ALL
SELECT '126789' FIELD_ID FROM DUAL
)
SELECT TO_CHAR(TO_NUMBER(FIELD_ID)) FIELD_ID
FROM TST_DATA
;
FIELD_ID
6789
26789
126789
nvl(ltrim(字段id,'0'),'0')
nvl(ltrim(字段id,'0'),'0')