Чтобы проверить, является ли фамилия частью имени - PullRequest
0 голосов
/ 22 июня 2019

Я работаю над правилами стандартизации данных, и одно из правил говорит: «Если фамилия является частью имени, удалите фамилию из имени». мой запрос - как я могу проверить, если в имени столбца есть фамилия, используя oracle sql developer?

Я пытался использовать:

select fst_nm, lst_nm from emp where fst_nm = fst_nm || lst_nm  ;

но этот запрос возвращает результаты '0'.

Также я попробовал другой запрос:

select fst_nm, lst_nm, regexp_substr(fst_nm, '[^ ]+',1,1) from emp ;

Я пытался использовать следующий запрос

select fst_nm, lst_nm from emp where fst_nm = fst_nm || lst_nm  ;

но этот запрос ничего не возвращает, я имею в виду результаты '0'.

Также я попробовал другой запрос:

select fst_nm, lst_nm, regexp_substr(fst_nm, '[^ ]+',1,1) from emp ;

ожидаемый результат:

fst_nm = john smith ;
lst_nm = smith

Фактический результат:

fst_nm = john ;  
lst_nm = smith

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Вы должны иметь возможность просто выполнить полную замену всей таблицы:

UPDATE emp
SET fst_nm = REPLACE(fst_nm, lst_nm, '');

Причина, по которой это должно сработать, заключается в том, что для тех записей, где отображается фамилия , а не как часть имени, замена не будет иметь никакого эффекта.В противном случае фамилия будет удалена из имени.

0 голосов
/ 22 июня 2019

Вы можете использовать ниже логику

выберите длину ('saurabh rai'), instr ('saurabh rai', ''), случай, когда длина ('saurabh rai')> instr ('saurabh rai', '') затем substr ('saurabh', 1, instr ('saurabh rai', '') -1), в противном случае 'saurabh rai' заканчивается как двойное;

Обновить emp set fst_nm = (Случай, когда длина (fst_nm)> instr (fst_nm, ''), а затем substr (fst_nm, 1, instr (fst_nm, '') -1), иначе fst_nm end);

...