如何在LIKE中使用列中的值-Postgresql

问题描述 投票:-1回答:1

我正在尝试检查电子邮件列表的有效性。有效的电子邮件格式为:

[email protected]

我可以使用正则表达式或LIKE运算符找到有效的电子邮件。但是,我想了解是否有一种方法可以使用其他列(例如“名称”和“姓氏”)中的数据,以避免由[A- Za-z]在正则表达式中。

我已经尝试过:

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  | [email protected] | true  |
| Molly-Rae | Jackson  | [email protected]  | false |
+-----------+----------+-----------------------------+-------+
sql postgresql sql-like
1个回答
0
投票

您可以使用其他列来计算要验证的模式。例如:

select
  name, 
  lastname, 
  email,
  lower(email) like lower(name || '.' || lastname || '@xmail.com') as valid
from personlist
© www.soinside.com 2019 - 2024. All rights reserved.