Oracle SQL выберите запрос сравнения 2 столбца - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть таблица с этими двумя столбцами:

USERNAME    EMAIL_ADDRESS
------------------------------
username1   username1@abc.com
username2   username2@abc.com
username3   username3@abc.com

Первый столбец - это имя пользователя, а второй - <username> с почтовым доменом вместе с ним.

Как можно Я сравниваю два столбца, используя Oracle SQL, чтобы найти, есть ли строки, в которых столбец email_address не имеет правильного соответствующего имени пользователя в формате адреса электронной почты?

Ответы [ 3 ]

0 голосов
/ 16 февраля 2020

Учитывая данные, которые вы представили, вы можете использовать регулярное выражение для анализа вашего адреса электронной почты, а затем сравнить имя пользователя USER_NAME с именем пользователя в электронном письме:

WITH cteData(USER_NAME, EMAIL_ADDRESS) AS
       (SELECT 'username1', 'username1@abc.com' FROM DUAL UNION ALL
        SELECT 'username2', 'username2@abc.com' FROM DUAL UNION ALL
        SELECT 'usernameX', 'username3@xyz.com' FROM DUAL UNION ALL
        SELECT 'username4', 'username4@abc.com' FROM DUAL),
     cteEmails AS
       (SELECT um.USER_NAME,
               REGEXP_SUBSTR(um.EMAIL_ADDRESS, '[^@.]+', 1, 1) AS EMAIL_USER_NAME,
               REGEXP_SUBSTR(um.EMAIL_ADDRESS, '[^@.]+', 1, 2) AS EMAIL_COMPANY,
               REGEXP_SUBSTR(um.EMAIL_ADDRESS, '[^@.]+', 1, 3) AS EMAIL_DOMAIN
          FROM cteData um)
SELECT *
  FROM cteEmails
  WHERE USER_NAME <> EMAIL_USER_NAME

, которое возвращает

USER_NAME   EMAIL_USER_NAME EMAIL_COMPANY   EMAIL_DOMAIN
usernameX   username3       xyz             com

при запуске.

db <> скрипка здесь

0 голосов
/ 16 февраля 2020

Вы можете использовать Regex

SELECT * FROM your_table where username_col != REGEXP_SUBSTR(email_col, '([^@]+)')

//regex ([^@]+) matches any string before @ character

Пример Пример дБ скрипки

WITH  da(usr, eml) AS
       (SELECT 'username1', 'username1@abc.com' FROM DUAL UNION ALL
        SELECT 'username2', 'username2@abc.com' FROM DUAL UNION ALL
        SELECT 'username_odd', 'username3@abc.com' FROM DUAL UNION ALL
        SELECT 'username4', 'username4@abc.com' FROM DUAL)
SELECT * FROM da  where usr != REGEXP_SUBSTR(eml, '([^@]+)')
0 голосов
/ 16 февраля 2020

найти, есть ли строки, в которых столбец email_address не имеет правильного соответствующего имени пользователя в формате адреса электронной почты?

Предположительно, вы хотите:

select t.*
from mytable t
where t.email_address not like t.username || '%'

Это вернет все записи, для которых email_address не начинается с username.

Вы можете попытаться сопоставить все имя пользователя с выражением, например:

where t.email_address not like t.username || '@%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...