2013-10-10 74 views
0

使用Oracle SQL顯影劑 有條件地替換字段的字符在表中我有:
字段ID 1: '006789'
字段ID 2: '026789'
字段ID 3:「126789 'PL/SQL使用正則表達式

欲:
字段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

'NVL(LTRIM(FIELD_ID, '0'), '0')' –

回答

3

如果您需要刪除字符串中的前導或後綴字符,則不需要regex,TRIM函數就足夠了。在Oracle中,有 三個函數,TRIM,LTRIMRTRIM

要回答你的問題,無論是

ltrim(field_id,'0') 

trim(leading '0' from field_id) 

應該工作。

此外,請注意TRIM和LTRIM/RTRIM之間存在細微的差異。 TRIM只能使用一個修剪字符,而RTRIM/LTRIM可以使用很多。

1

你可以用一個單一的更新語句像這樣做,

UPDATE employees set field_id = ltrim(field_id, '0'); 
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