我有这个问题:
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。我该如何做到这一点?
答案 0 :(得分:46)
IF
用于选择字段,然后LIKE
子句放在其后面:
SELECT `id` , `naam`
FROM `klanten`
WHERE IF(`email` != '', `email`, `email2`) LIKE '%@domain.nl%'
答案 1 :(得分:8)
您想使用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'会成功。
答案 2 :(得分:2)
请注意以下内容与Gordon Linoff的回答在功能上有所不同。他的回答假定如果email2
为NULL,则要使用email
。如果email2
是空字符串,我假设您要使用email
。正确答案取决于您的数据库(或者您可以执行NULL检查和空字符串检查 - 这一切都取决于适合您的数据库设计的内容)。
SELECT `id` , `naam`
FROM `klanten`
WHERE `email` LIKE '%anja@fiskkoer.nl%'
OR (LENGTH(email) = 0 AND `email2` LIKE '%anja@fiskkoer.nl%')
答案 3 :(得分:1)
试试这个,希望有所帮助
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
答案 4 :(得分:0)