46

我有这个查询:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE (
`email` LIKE  '%@domain.nl%'
OR  `email2` LIKE  '%@domain.nl%'
)

但我想做这样的事情:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` > 0,
`email` LIKE  '%@domain.nl%'
,  `email2` LIKE  '%@domain.nl%'
)

如何检查电子邮件是否存在?我想使用电子邮件,如果此字段为空,我想使用 email2。我该如何做到这一点?

4

5 回答 5

71

IF用于选择字段,然后在其后LIKE放置子句:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` != '', `email`, `email2`) LIKE  '%@domain.nl%'
于 2013-03-01T16:42:15.300 回答
14

你想使用coalesce()

where coalesce(email, email2) like '%anja@fiskkoer.nl%'

如果您想处理字符串 ('') 与 NULL,一个案例有效:

where (case when email is NULL or email = '' then email2 else email end) like '%anja@fiskkoer.nl%'

而且,如果您担心字符串实际上只是空格:

where (case when email is NULL or ltrim(email) = '' then email2 else email end) like '%anja@fiskkoer.nl%'

顺便说一句,示例if语句实际上是在说“如果电子邮件以大于 0 的数字开头”。这是因为比较的是 0,一个数字。MySQL 隐式尝试将字符串转换为数字。因此,'abcd@de.com' 会失败,因为字符串会转换为 0。'0abc@de.com' 也会如此。但是,“1abc@de.com”和“01abc@de.com”会成功。

于 2013-03-01T16:34:33.433 回答
3

请注意,以下内容在功能上与 Gordon Linoff 的回答不同。他的回答假设您想使用email2if emailis NULL。我的假设你想使用email2ifemail是一个空字符串。正确答案将取决于您的数据库(或者您可以执行 NULL 检查空字符串检查 - 这完全取决于适合您的数据库设计的内容)。

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE `email` LIKE  '%anja@fiskkoer.nl%'
OR (LENGTH(email) = 0 AND `email2` LIKE  '%anja@fiskkoer.nl%')
于 2013-03-01T16:35:15.997 回答
2

试试这个,希望有帮助

select user_display_image as user_image,
user_display_name as user_name,
invitee_phone,
(
 CASE 
    WHEN invitee_status=1 THEN "attending" 
    WHEN invitee_status=2 THEN "unsure" 
    WHEN invitee_status=3 THEN "declined" 
    WHEN invitee_status=0 THEN "notreviwed" END
) AS  invitee_status
 FROM your_tbl
于 2015-10-28T08:18:07.167 回答
2

下面是一个表的示例查询,该表与具有查询参数的同一个表具有外键关系。

在此处输入图像描述

SET @x = -1;
SELECT id, categoryName 
FROM Catergory WHERE IF(@x > 0,category_ParentId = @x,category_ParentId IS NOT NULL);

@x可以更改。

于 2020-03-15T06:41:06.920 回答