例えば、お知らせテーブルの投稿日時が過去の場合は0を、未来の場合は1を’is_future’という別名をつけて抽出したい場合
SQL
SELECT
i.id,
i.post_datetime,
CASE WHEN i.post_datetime < NOW() THEN 0 ELSE 1 END AS is_future
FROM
informations i
Laravelクエリビルダ
$information = Information::select([
'i.id',
'i.post_datetime',
])
->selectRaw("CASE WHEN i.post_datetime < NOW() THEN 0 ELSE 1 END AS is_future")
->from('informations AS i')
->get();
ちなみに、開始時刻より現在時刻が未来でかつ、終了時刻より現在時刻が過去の場合という式は、ANDで繋げるとOK。’または’の場合は、ORで繋げるとOK。
$information = Information::select([
'i.id',
'i.start_datetime',
'i.end_datetime',
])
->selectRaw("CASE WHEN i.start_datetime <= NOW() AND i.end_datetime > NOW() THEN 1 ELSE 0 END AS is_public")
->from('informations AS i')
->get();
また、20才以下は0、30才以下は1、40才以下は2、それ以外は3という場合は以下のようにすれば良い。
->selectRaw("
CASE
WHEN age < 20 THEN 0
WHEN age < 30 THEN 1
WHEN age < 40 THEN 2
ELSE 3
END AS age_group
")