Mam poniższe wartości w kolumnie tabeli:
Veracruz-Llave Federal Hwy 150
Campeche Federal Hwy 261
Puebla Federal Hwy 190
Morelos Federal Hwy 160
Puebla Federal Hwy 160
Chciałbym zaktualizować tabelę w taki sposób, aby nazwa stanu przed usunięciem / usunięciem ciągu „Federal Hwy”.
Pożądany wynik to:
Federal Hwy 150
Federal Hwy 261
Federal Hwy 190
Federal Hwy 160
To znaczy, usuń wszystko przed „Federal Hwy”
Czy funkcja TRIM () może tutaj pomóc?
Odpowiedzi:
0 dla odpowiedzi № 1Domyślam się, że czyścisz adresy i musisz przeprowadzić aktualizację. Najpierw przetestuj w ten sposób, używając przykładowych adresów:
select regexp_substr("Veracruz-Llave Federal Hwy 150", " (Federal.*)$", 1, 1, null, 1 ) from dual;
Następnie wykonaj kopię zapasową tabeli i uruchom(nieprzetestowane, używaj na własne ryzyko) - zakłada się, że WSZYSTKIE dane kolumny mają pojedynczą spację po tekście, który chcesz usunąć, jest to pierwsza spacja w linii, a resztę ciągu chcesz zachować:
update table set column_name = regexp_substr(column_name, " (Federal.*)$", 1, 1, null, 1 );
To zajmuje pierwszą podgrupę (co jest wparens) pierwszego wystąpienia wzorca spacji, po którym następuje 0 lub więcej znaków dowolnego typu zakotwiczonych na końcu wiersza. Innymi słowy, zachowaj wszystko po pierwszej spacji, ale nie licząc jej.
Edycja: poprawiony przykład oparty na nowych informacjach przedstawionych poniżej przez PO.
0 dla odpowiedzi nr 2
Możesz użyć REPLACE razem z SUBSTR i 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
0 dla odpowiedzi № 3
Zakładam, że musisz przyciąć nazwy stanów (tj.pierwsze słowo) z ciągu; logika polega na użyciu funkcji substr do podania wymaganego łańcucha, instr zwróci pozycję pierwszej spacji, aby można było od niej rozpocząć przycinanie.
update table_name set column_name = ltrim(substr(column_name, instr(column_name," ")));