mysql when用法 如果在WHERE子句上则为else




sql if else用法 (4)

请注意以下内容在功能上与Gordon Linoff的答案不同。 他的回答是假设您希望在email为NULL时使用email2 。 如果email是空字符串,我假设您要使用email2 。 正确的答案取决于您的数据库(或者您可以执行NULL检查空字符串检查 - 这一切都取决于适合您的数据库设计)。

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE `email` LIKE  '%[email protected]%'
OR (LENGTH(email) = 0 AND `email2` LIKE  '%[email protected]%')

我有这个问题:

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。 我该如何做到这一点?


试试这个,希望它有所帮助

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

你想使用coalesce()

where coalesce(email, email2) like '%[email protected]%'

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

where (case when email is NULL or email = '' then email2 else email end) like '%[email protected]%'

而且,如果你担心字符串真的只是空格:

where (case when email is NULL or ltrim(email) = '' then email2 else email end) like '%[email protected]%'

顺便说一句,示例if语句实际上是在说“如果电子邮件以大于0的数字开头”。 这是因为比较是0,一个数字。 MySQL隐式尝试将字符串转换为数字。 因此,'[email protected]'会失败,因为该字符串将转换为0.与'[email protected]'一样。 但是,'[email protected]'和'[email protected]'会成功。


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

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




if-statement