如何使用LIKE-Postgresql列中的值
我正在检查电子邮件列表的有效性。有效电子邮件的格式如下: 名字。lastname@host.domain 我可以使用regex或类似的操作符查找有效的电子邮件。但我想了解是否有一种方法可以使用其他列(如“name”和“lastname”)中的数据,以避免因包含不同字符的唯一名称(Regex中的[a-Za-z]未涵盖)而产生的任何问题 我试过这个:如何使用LIKE-Postgresql列中的值,sql,postgresql,sql-like,Sql,Postgresql,Sql Like,我正在检查电子邮件列表的有效性。有效电子邮件的格式如下: 名字。lastname@host.domain 我可以使用regex或类似的操作符查找有效的电子邮件。但我想了解是否有一种方法可以使用其他列(如“name”和“lastname”)中的数据,以避免因包含不同字符的唯一名称(Regex中的[a-Za-z]未涵盖)而产生的任何问题 我试过这个: SELECT name, lastname, email, CASE WHEN
SELECT name,
lastname,
email,
CASE
WHEN email ~ '[A-Za-z]*\.[A-Za-z]*\@[A-Za-z]*\.[A-Za-z]*' THEN true
ELSE false
END AS valid
FROM personlist
这是:
SELECT name,
lastname,
email,
CASE
WHEN email LIKE '%.%||%.%' THEN true
ELSE false
END AS valid
FROM personlist
它们似乎工作得很好,但我想知道是否有一种方法可以将来自其他列的数据与诸如LIKE之类的运算符一起使用。我认为,使用现有列中的数据将导致更有针对性和更可靠的查询
例如:
+-----------+----------+-----------------------------+-------+
| name | lastname | email | valid |
+-----------+----------+-----------------------------+-------+
| Molly-Rae | Jackson | molly-rae.jackson@xmail.com | true |
| Molly-Rae | Jackson | molly-raejackson@xmail.com | false |
+-----------+----------+-----------------------------+-------+
select
name,
lastname,
email,
lower(email) like lower(name || '.' || lastname || '@xmail.com') as valid
from personlist
您可以使用其他列计算要验证的模式。例如:
+-----------+----------+-----------------------------+-------+
| name | lastname | email | valid |
+-----------+----------+-----------------------------+-------+
| Molly-Rae | Jackson | molly-rae.jackson@xmail.com | true |
| Molly-Rae | Jackson | molly-raejackson@xmail.com | false |
+-----------+----------+-----------------------------+-------+
select
name,
lastname,
email,
lower(email) like lower(name || '.' || lastname || '@xmail.com') as valid
from personlist
您可以使用其他列计算要验证的模式。例如:
+-----------+----------+-----------------------------+-------+
| name | lastname | email | valid |
+-----------+----------+-----------------------------+-------+
| Molly-Rae | Jackson | molly-rae.jackson@xmail.com | true |
| Molly-Rae | Jackson | molly-raejackson@xmail.com | false |
+-----------+----------+-----------------------------+-------+
select
name,
lastname,
email,
lower(email) like lower(name || '.' || lastname || '@xmail.com') as valid
from personlist
示例数据和期望的结果将非常有用。此外,我需要忽略大小写敏感度,删除names/lastnames中的任何空格。我喜欢和替换就足够了吗?我不能尝试,因为我不能用LIKE运算符使用列中的数据。你的问题很不幸,我想这就是你要问的。你知道主机和域名吗?然后您可以进行直接比较:当name | |'.| | lastname | |'@'| | host | |'.| | domain=email时为大小写,然后为TRUE或FALSE结束。如果您不知道主机和域,那么您可以在“@”上拆分电子邮件,并直接比较名称、lastname和左侧部分,以及右侧部分的正则表达式(只需确保“.”>0?)我不知道域。我只知道name和lastname列中的数据。不相关,但是:您的CASE表达式可以简化为
email~'[A-Za-z]*\.[A-Za-z]*\@[A-Za-z]*\.[A-Za-z]*'如果有效
要进行不区分大小写的匹配,请使用~*
而不是~
示例数据和所需结果将非常有用。此外,我需要忽略大小写敏感度并删除names/lastnames中的所有空格。我喜欢和替换就足够了吗?我不能尝试,因为我不能用LIKE运算符使用列中的数据。你的问题很不幸,我想这就是你要问的。你知道主机和域名吗?然后您可以进行直接比较:当name | |'.| | lastname | |'@'| | host | |'.| | domain=email时为大小写,然后为TRUE或FALSE结束。如果您不知道主机和域,那么您可以在“@”上拆分电子邮件,并直接比较名称、lastname和左侧部分,以及右侧部分的正则表达式(只需确保“.”>0?)我不知道域。我只知道name和lastname列中的数据。不相关,但是:您的大小写表达式可以简化为email~'[A-Za-z]*\.[A-Za-z]*\@[A-Za-z]*\.[A-Za-z]*'有效
要进行不区分大小写的匹配,请使用~*
,而不是