Как извлечь фамилию из firstname.lastname@email.com с помощью Oracle? - PullRequest
2 голосов
/ 27 марта 2010

Мне нужно сравнить значение столбца (LASTNAME) с системной переменной (: VARIABLE), но эта переменная является адресом электронной почты, поэтому мне нужно обрезать "@ email.com" и "firstname". Некоторые вещи, которые я пробовал:

select * 
  from TABLENAME 
 where LASTNAME LIKE :VARIABLE

select * 
  from TABLENAME 
 where LASTNAME IN :VARIABLE

Мне удалось обрезать @ mail.com, не могу понять, как обрезать FIRSTNAME. в то же время.

Ответы [ 3 ]

3 голосов
/ 27 марта 2010

Регулярные выражения могут помочь:

SQL> SELECT LTRIM(regexp_substr('firstname.lastname@abc.com','\.[^@]*'),'.') last_name from dual;

LAST_NAME
---------
lastname

Ваш запрос может выглядеть следующим образом:

SELECT *
  FROM tablename 
 WHERE UPPER(LTRIM(regexp_substr(:VARIABLE,'\.[^@]*'),'.')) = UPPER(lastname);
1 голос
/ 27 марта 2010

Использование:

SELECT t.*
  FROM TABLE t
 WHERE t.lastname LIKE '%' || SUBSTR(:VARIABLE, 
                                     INSTR(:VARIABLE, '.') +1, 
                                     INSTR(:VARIABLE, '@')) || '%'

Добавьте UPPER или LOWER в обе стороны, если вы хотите быть уверенными в совпадении без учета регистра.

Справка:

0 голосов
/ 27 марта 2010

Вы можете использовать комбинацию SUBSTR и INSTR.

Функция instr возвращает местоположение подстроки в строке.С помощью этого вы можете найти символ "." Или "@".

Затем используйте substr, чтобы получить подстроку от начала до предыдущей позиции

SELECT SUBSTR ('Takeпервые четыре символа ', 1, 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...