我在表格列中有以下值:
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()函数可以在这里帮忙吗?
答案 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,' ')));