pub fn case_when<C, T, ST>(condition: C, if_true: T) -> case_when<C, T, ST>where
C: Expression,
<C as Expression>::SqlType: BoolOrNullableBool,
T: AsExpression<ST>,
ST: SqlType + TypedExpressionType,Expand description
Creates a SQL CASE WHEN ... END expression
§Example
use diesel::dsl::case_when;
let users_with_name: Vec<(i32, Option<i32>)> = users
.select((id, case_when(name.eq("Sean"), id)))
.load(connection)
.unwrap();
assert_eq!(&[(1, Some(1)), (2, None)], users_with_name.as_slice());§ELSE clause
use diesel::dsl::case_when;
let users_with_name: Vec<(i32, i32)> = users
.select((id, case_when(name.eq("Sean"), id).otherwise(0)))
.load(connection)
.unwrap();
assert_eq!(&[(1, 1), (2, 0)], users_with_name.as_slice());Note that the SQL types of the case_when and else expressions should
be equal. This includes whether they are wrapped in
Nullable, so you may need to call
nullable
on one of them.
§More WHEN branches
use diesel::dsl::case_when;
let users_with_name: Vec<(i32, Option<i32>)> = users
.select((id, case_when(name.eq("Sean"), id).when(name.eq("Tess"), 2)))
.load(connection)
.unwrap();
assert_eq!(&[(1, Some(1)), (2, Some(2))], users_with_name.as_slice());