У стовпці таблиці є значення нижче:
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," ")));