2015-05-28 93 views
0

我有表的列以下值:在PL/SQL中使用裁剪功能

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

我想更新,以使繩「聯邦高速公路」之前狀態的名字被刪除表/刪除。

所需的輸出將是:

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

即清除之前,這裏的聯邦高速公路「

可以修剪()函數什麼幫助?

+0

向我們展示您的完整存儲過程 –

+0

您是否需要更新某一列中的數據或者何時從中進行選擇?需要更多信息。 –

+0

我寧願使用regexp_replace:'regexp_replace(column,'(。* Federal Hwy)*(。*)','\ 2')' – krokodilko

回答

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); 

這需要第一羣組(什麼在括號)的空格,然後是0個或多個錨定到行尾的任何類型的字符。換句話說,保留所有內容但不包括第一個空格。

編輯:修改基於下面的OP提供的新信息的示例。

+0

您的代碼有效。但是,我只注意到一些狀態路由在字符串「Federal」之前有超過1個字符串。 – Toronto23

+0

只需將「Federal」添加到正則表達式。我修改了這個例子。試一試。 –

0

您可以使用SUBSTR和INSTR REPLACE沿

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                            
0

我假設你需要從字符串修整狀態名稱(即第一個字。); 邏輯使用substr函數給出require string,instr將返回第一個空間的位置,以便修剪可以從它開始。

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