Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pl/sql使用正则表达式有条件地替换表中字段的字符_Sql_Regex_Oracle - Fatal编程技术网

pl/sql使用正则表达式有条件地替换表中字段的字符

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

使用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..//
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')