0

Using ORACLE sql developer I have:
Field ID 1: '006789'
Field ID 2: '026789'
Field ID 3: '126789'

I want:
Field ID 1: '6789'
Field ID 2: '26789'
Field ID 3: '126789'

This lives in table "EMPLOYEES"

I want to do something like this

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;

I'm really new to procedures and regex (obviously).

4

4 回答 4

3

如果您需要从字符串中删除前导或尾随字符,则不需要正则表达式,TRIM 函数就足够了。在 Oracle 中,共有三个函数,TRIMLTRIMRTRIM

要回答你的问题,要么

ltrim(field_id,'0')

或者

trim(leading '0' from field_id)

应该管用。

另请注意,TRIM 和 LTRIM/RTRIM 之间存在细微差别。TRIM 只能采用一个修剪字符,而 RTRIM/LTRIM 可以采用多个。

于 2013-10-10T17:07:10.010 回答
1

不知道你为什么要使用 RegExp,但如果你只需要从字符串中删除前导和尾随字符,Oracle 就有 TRIM 功能。

TRIM('123Tech111' 中的'1') 将返回 '23Tech'

符合您要求的示例

甲骨文文档

于 2013-10-10T17:14:40.357 回答
1

您可以使用单个更新语句来做到这一点,例如,

UPDATE employees set field_id = ltrim(field_id, '0');
于 2013-10-10T17:09:38.140 回答
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
于 2017-08-22T19:05:57.053 回答