web-dev-qa-db-ja.com

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を使用します。どうすればこれを達成できますか?

27
botenvouwer

IFを使用してフィールドを選択し、その後にLIKE句を配置します。

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

coalesce()を使用します:

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

empty文字列( '')対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は暗黙的に文字列を数値に変換しようとします。したがって、文字列が0として変換されるため、「[email protected]」は失敗します。「[email protected]」も同様です。ただし、「[email protected]」および「[email protected]」は成功します。

9
Gordon Linoff

以下は、Gordon Linoffの答えと機能的に異なることに注意してください。彼の答えは、email2emailがNULLの場合。私はあなたがemail2emailが空文字列の場合。正しい答えはデータベースに依存します(または、NULLチェックand空文字列チェックを実行できます-それはすべて、データベース設計に適切なものに依存します)。

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

これを試して、それが役立つことを願って

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