Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LIKE-Postgresql列中的值_Sql_Postgresql_Sql Like - Fatal编程技术网

如何使用LIKE-Postgresql列中的值

如何使用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

我正在检查电子邮件列表的有效性。有效电子邮件的格式如下:

名字。lastname@host.domain

我可以使用regex或类似的操作符查找有效的电子邮件。但我想了解是否有一种方法可以使用其他列(如“name”和“lastname”)中的数据,以避免因包含不同字符的唯一名称(Regex中的[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  | 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]*'有效
要进行不区分大小写的匹配,请使用
~*
,而不是