/ / Używanie funkcji Trim w PL / SQL - sql, oracle, replace, plsql

Używanie funkcji Trim w PL / SQL - sql, oracle, replace, plsql

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 № 1

Domyś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," ")));