私はこのクエリを持っています:
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を使用します。どうすればこれを達成できますか?
IF
を使用してフィールドを選択し、その後にLIKE
句を配置します。
SELECT `id` , `naam`
FROM `klanten`
WHERE IF(`email` != '', `email`, `email2`) LIKE '%@domain.nl%'
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]」は成功します。
以下は、Gordon Linoffの答えと機能的に異なることに注意してください。彼の答えは、email2
email
がNULLの場合。私はあなたがemail2
email
が空文字列の場合。正しい答えはデータベースに依存します(または、NULLチェックand空文字列チェックを実行できます-それはすべて、データベース設計に適切なものに依存します)。
SELECT `id` , `naam`
FROM `klanten`
WHERE `email` LIKE '%[email protected]%'
OR (LENGTH(email) = 0 AND `email2` LIKE '%[email protected]%')
これを試して、それが役立つことを願って
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