使用ORACLE sql developer
我有:
字段ID 1:'006789'
字段ID 2:'026789'
字段ID 3:'126789'
我想:
字段ID 1:'6789'
字段ID 2:'26789'
字段ID 3:'126789'
现居表“员工”
我想做这样的事情
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;
我真的很擅长程序和正则表达式(显然)。
答案 0 :(得分:3)
如果您需要从字符串中删除前导或尾随字符,则不需要正则表达式,TRIM函数就足够了。在Oracle中,那里 有三个功能,TRIM,LTRIM和RTRIM。
要回答你的问题,
ltrim(field_id,'0')
或
trim(leading '0' from field_id)
应该有效。
另外,请注意TRIM和LTRIM / RTRIM之间存在细微差别。 TRIM只能使用一个修剪字符,而RTRIM / LTRIM可以占用很多。
答案 1 :(得分:1)
您可以使用单个更新语句(
)来完成此操作UPDATE employees set field_id = ltrim(field_id, '0');
答案 2 :(得分:1)
不确定你为什么选择RegExp,但如果你只需要从字符串中删除前导和尾随字符,那么Oracle就具有TRIM功能。
TRIM(来自'123Tech111'的'1')将返回'23Tech'
答案 3 :(得分:0)
我意识到这是旧的,但另一种选择(因为源数据是带有前导零的数字),您可以将字符串转换为数字,然后返回字符串,如: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