Подтвердить что ты не робот

Если иное в отношении WHERE

У меня есть этот запрос:

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. Как это сделать?

4b9b3361

Ответ 1

IF используется для выбора поля, затем после него кладет LIKE:

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

Ответ 2

Вы хотите использовать 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]" будут успешными.

Ответ 3

Обратите внимание, что следующее функционально отличается от ответа Гордона Линоффа. Его ответ предполагает, что вы хотите использовать email2, если email - NULL. Mine предполагает, что вы хотите использовать email2, если email является пустой строкой. Правильный ответ будет зависеть от вашей базы данных (или вы можете выполнить проверку NULL и проверку пустой строки - все зависит от того, что подходит для вашего проекта базы данных).

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

Ответ 4

попробуйте это, надеюсь, что это поможет

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