Как проверить, больше ли длина строки, чем одно слово, и оставить только первое слово, иначе сохранить всю строку в SQL? - PullRequest
1 голос
/ 14 октября 2019

У меня есть следующая таблица в sql.

enter image description here

Я хочу оставить только первое слово в столбце Имя. Я написал код ниже, однако, когда я запускаю его, он извлекает первое слово для строк длиннее одного слова, но возвращает пустую ячейку для строк, которые состоят только из одного слова. Не могли бы вы посоветовать мне, как мне изменить его, чтобы получить желаемый результат, сохраняя только первое слово из всех строк.

SELECT ID, substr (Name, 1, instr (Name, '') -1)Имя AS FROM names_list

Жаба СУБД для Oracle

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Это выберет первое слово из столбца name:

SQL> with names_list (id, name) as
  2    (select 1, 'John Smith'          from dual union all
  3     select 2, 'One'                 from dual union all
  4     select 3, 'Nikola O''Neil'      from dual union all
  5     select 4, 'Rose Ann Lee'        from dual union all
  6     select 5, 'Neil'                from dual union all
  7     select 6, 'William Hugh Forest' from dual union all
  8     select 7, 'Andrew'              from dual
  9    )
 10  select id,
 11    regexp_substr(name, '^\w+') name
 12  from names_list;

        ID NAME
---------- --------------------
         1 John
         2 One
         3 Nikola
         4 Rose
         5 Neil
         6 William
         7 Andrew

7 rows selected.

SQL>
1 голос
/ 14 октября 2019

Как насчет regexp_substr()?

select regexp_substr(name, '^[^ ]+')
from names_list;

Это более гибко, чем instr(), потому что у вас больше контроля над разделителями. Например, если иногда используется запятая:

select regexp_substr(name, '^[^ ,]+')
from names_list;
...