在PL / SQL

时间:2015-05-28 16:20:49

标签: sql oracle replace plsql

我在表格列中有以下值:

Veracruz-Llave Federal Hwy 150
Campeche Federal Hwy 261
Puebla Federal Hwy 190
Morelos Federal Hwy 160
Puebla Federal Hwy 160

我想更新表格,以便删除/删除字符串'Federal Hwy'之前的州名。

所需的输出将是:

Federal Hwy 150    
Federal Hwy 261    
Federal Hwy 190    
Federal Hwy 160

即,在“联邦高速公路”之前删除任何东西

TRIM()函数可以在这里帮忙吗?

3 个答案:

答案 0 :(得分:0)

我猜你正在清理地址并需要进行更新。首先使用一些示例地址对此进行测试:

select regexp_substr('Veracruz-Llave Federal Hwy 150', ' (Federal.*)$', 1, 1, null, 1 ) from dual;

然后备份表格,然后运行(未经测试,使用时风险自负) - 这假设您要删除的文本后所有列数据都有一个空格,这是该行中的第一个空格并且你想保留字符串的其余部分:

update table set column_name = regexp_substr(column_name, ' (Federal.*)$', 1, 1, null, 1 );

这将占用第一个空格模式的第一个子组(在parens中为什么),然后是锚定到该行末尾的任何类型的0个或更多个字符。换句话说,保留所有内容,但不包括第一个空格。

编辑:基于以下OP提供的新信息的修改示例。

答案 1 :(得分:0)

您可以将REPLACE与SUBSTR和INSTR一起使用

  SQL> create table states (name varchar2(200));
                insert into states values('Campeche Federal Hwy 261');
                insert into states values ('Puebla Federal Hwy 190');
                insert into states values('Morelos Federal Hwy 160');
                insert into states values ('Puebla Federal Hwy 160');
                commit;

            -- OUTPUT:
                    Table created.                                                                                                                       
                    1 row created.                                                                                                                            
                    1 row created.                                                                                                                            
                    1 row created.                                                                                                                              
                    1 row created.                                                                                                                                   
                    Commit complete. 

       --update table STATES to get only state
  SQL>update STATES
        set NAME = REPLACE
                    (NAME, 
                          SUBSTR(NAME,0,
                                    (INSTR(NAME,'Federal',1,1))-1
                                )
                        ,'');     
  --4 rows updated.  

  SQL> commit;                                                                                                               
    Commit complete.                                                                                                            

  SQL> select * from STATES;                                                                                                   
    NAME                                                                                                                        
    ----------------------------------------------------------------------------------------------------                        
    Federal Hwy 261                                                                                                             
    Federal Hwy 190                                                                                                             
    Federal Hwy 160                                                                                                             
    Federal Hwy 160                                                                                                             

答案 2 :(得分:0)

我假设您需要从字符串中修剪状态名称(即第一个字); 逻辑是使用substr fuction给出require字符串,instr将返回第一个空格的位置,以便修剪可以从它开始。

update table_name set column_name = ltrim(substr(column_name, instr(column_name,' ')));