繁体   English   中英

Oracle SQL 选择查询比较 2 列

[英]Oracle SQL select query compare 2 columns

我有一个包含这两列的表格:

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

第一列是用户名,第二列是带有电子邮件域的<username>

如何使用 Oracle SQL 比较两列以查找是否有任何行的email_address列在电子邮件地址格式中没有正确的对应用户名?

查找是否有任何行的 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 || '@%'

根据您提供的数据,您可以使用正则表达式来解析您的电子邮件地址,然后将 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<>在这里摆弄

您可以使用正则表达式

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, '([^@]+)')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM