/ / Використання функції Trim у PL / SQL - sql, oracle, replace, plsql

Використання функції Trim в PL / SQL - sql, oracle, substitu, 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

Тобто, видаліть що-небудь перед "Federal Hwy"

Чи може функція TRIM () допомогти тут?

Відповіді:

0 для відповіді № 1

Я здогадуюсь, що ви зачищаєте адреси і вам потрібно оновити. Спершу протестуйте це, як це, з деякими зразками адрес:

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 або більше символів будь-якого типу, прикріплених до кінця рядка. Іншими словами, зберігайте все після, але не включаючи перший пробіл.

Редагувати: Змінений приклад, заснований на новій інформації, представленій нижче


0 для відповіді № 2

Ви можете використовувати 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

0 для відповіді № 3

Я припускаю, що вам потрібно обрізати імена штатів (тобто. перше слово) із рядка; Логіка полягає у використанні substr fuction, щоб задати рядок require, instr поверне позицію першого пробілу, щоб обрізання могло розпочатися з нього.

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