web-dev-qa-db-fra.com

Sinon dans la clause WHERE

J'ai cette requête:

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

Mais je veux faire quelque chose comme ça:

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

Comment vérifier si un e-mail existe? Je souhaite utiliser le courrier électronique et si ce champ est vide, je souhaite utiliser le courrier électronique2. Comment est-ce que j'accomplis ceci?

27
botenvouwer

IF est utilisé pour sélectionner le champ, puis la clause LIKE est placée après:

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

Vous souhaitez utiliser coalesce():

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

Si vous voulez gérer vide chaînes ('') contre NULL, un cas fonctionne:

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

Et, si vous craignez que la chaîne ne soit vraiment que des espaces:

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

Soit dit en passant, l'exemple de déclaration if dit vraiment "si le courrier électronique commence par un nombre supérieur à 0". C'est parce que la comparaison est à 0, un nombre. MySQL essaie implicitement de convertir la chaîne en un nombre. Ainsi, "[email protected]" échouerait, car la chaîne serait convertie en 0. De même que "[email protected]". Mais, "[email protected]" et "[email protected]" réussiraient.

9
Gordon Linoff

Notez que ce qui suit est fonctionnellement différent de la réponse de Gordon Linoff. Sa réponse suppose que vous souhaitez utiliser email2 si email est NULL. Le mien suppose que vous souhaitez utiliser email2 si email est une chaîne vide. La bonne réponse dépendra de votre base de données (ou vous pourriez effectuer une vérification NULL et une vérification de chaîne vide - tout dépend de ce qui est approprié pour la conception de votre base de données).

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

essayez ceci, j'espère que cela aide

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
1
Ameen Maheen