Enum Func
#[non_exhaustive]pub enum Func {
Show 22 variants
Max,
Min,
Sum,
Avg,
Abs,
Count,
IfNull,
Greatest,
Least,
CharLength,
Cast,
Custom(DynIden),
Coalesce,
Lower,
Upper,
BitAnd,
BitOr,
Random,
Round,
Md5,
MsFunction(MsFunction),
PgFunction(PgFunc),
}Expand description
Known SQL functions.
If something is not supported here, you can use Function::Custom.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Max
Min
Sum
Avg
Abs
Count
IfNull
Greatest
Least
CharLength
Cast
Custom(DynIden)
Coalesce
Lower
Upper
BitAnd
BitOr
Random
Round
Md5
MsFunction(MsFunction)
PgFunction(PgFunc)
Implementations§
§impl Func
impl Func
pub fn cust<T>(func: T) -> FunctionCallwhere
T: IntoIden,
pub fn cust<T>(func: T) -> FunctionCallwhere
T: IntoIden,
Call a custom function.
§Examples
use sea_query::{tests_cfg::*, *};
#[derive(Iden)]
#[iden = "MY_FUNCTION"]
struct MyFunction;
let query = Query::select()
.expr(Func::cust(MyFunction).arg("hello"))
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT MY_FUNCTION('hello')"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT MY_FUNCTION('hello')"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT MY_FUNCTION('hello')"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT MY_FUNCTION('hello')"#
);pub fn max<T>(expr: T) -> FunctionCall
pub fn max<T>(expr: T) -> FunctionCall
Call MAX function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::max(Expr::col((Char::Table, Char::SizeW))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT MAX([character].[size_w]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT MAX(`character`.`size_w`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT MAX("character"."size_w") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT MAX("character"."size_w") FROM "character""#
);pub fn min<T>(expr: T) -> FunctionCall
pub fn min<T>(expr: T) -> FunctionCall
Call MIN function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::min(Expr::col((Char::Table, Char::SizeH))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT MIN([character].[size_h]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT MIN(`character`.`size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT MIN("character"."size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT MIN("character"."size_h") FROM "character""#
);pub fn sum<T>(expr: T) -> FunctionCall
pub fn sum<T>(expr: T) -> FunctionCall
Call SUM function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::sum(Expr::col((Char::Table, Char::SizeH))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT SUM([character].[size_h]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT SUM(`character`.`size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT SUM("character"."size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT SUM("character"."size_h") FROM "character""#
);pub fn avg<T>(expr: T) -> FunctionCall
pub fn avg<T>(expr: T) -> FunctionCall
Call AVG function for average.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::avg(Expr::col((Char::Table, Char::SizeH))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT AVG([character].[size_h]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT AVG(`character`.`size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT AVG("character"."size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT AVG("character"."size_h") FROM "character""#
);pub fn abs<T>(expr: T) -> FunctionCall
pub fn abs<T>(expr: T) -> FunctionCall
Call ABS function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::abs(Expr::col((Char::Table, Char::SizeH))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT ABS([character].[size_h]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT ABS(`character`.`size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT ABS("character"."size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT ABS("character"."size_h") FROM "character""#
);pub fn count<T>(expr: T) -> FunctionCall
pub fn count<T>(expr: T) -> FunctionCall
Call COUNT function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::count(Expr::col((Char::Table, Char::Id))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT COUNT([character].[id]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT COUNT(`character`.`id`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT COUNT("character"."id") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT COUNT("character"."id") FROM "character""#
);pub fn count_distinct<T>(expr: T) -> FunctionCall
pub fn count_distinct<T>(expr: T) -> FunctionCall
Call COUNT function with the DISTINCT modifier.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::count_distinct(Expr::col((Char::Table, Char::Id))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT COUNT(DISTINCT [character].[id]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT COUNT(DISTINCT `character`.`id`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT COUNT(DISTINCT "character"."id") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT COUNT(DISTINCT "character"."id") FROM "character""#
);pub fn char_length<T>(expr: T) -> FunctionCall
pub fn char_length<T>(expr: T) -> FunctionCall
Call CHAR_LENGTH function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::char_length(Expr::col((Char::Table, Char::Character))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT CHAR_LENGTH([character].[character]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT CHAR_LENGTH(`character`.`character`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CHAR_LENGTH("character"."character") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT LENGTH("character"."character") FROM "character""#
);pub fn greatest<I>(args: I) -> FunctionCallwhere
I: IntoIterator<Item = Expr>,
pub fn greatest<I>(args: I) -> FunctionCallwhere
I: IntoIterator<Item = Expr>,
Call GREATEST function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::greatest([
Expr::col(Char::SizeW).into(),
Expr::col(Char::SizeH).into(),
]))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT GREATEST(`size_w`, `size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT GREATEST("size_w", "size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT MAX("size_w", "size_h") FROM "character""#
);pub fn least<I>(args: I) -> FunctionCallwhere
I: IntoIterator<Item = Expr>,
pub fn least<I>(args: I) -> FunctionCallwhere
I: IntoIterator<Item = Expr>,
Call LEAST function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::least([
Expr::col(Char::SizeW).into(),
Expr::col(Char::SizeH).into(),
]))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT LEAST(`size_w`, `size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT LEAST("size_w", "size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT MIN("size_w", "size_h") FROM "character""#
);pub fn if_null<A, B>(a: A, b: B) -> FunctionCall
pub fn if_null<A, B>(a: A, b: B) -> FunctionCall
Call IF NULL function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::if_null(
Expr::col(Char::SizeW),
Expr::col(Char::SizeH),
))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT ISNULL([size_w], [size_h]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT IFNULL(`size_w`, `size_h`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT COALESCE("size_w", "size_h") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT IFNULL("size_w", "size_h") FROM "character""#
);pub fn cast_as<V, I>(expr: V, iden: I) -> FunctionCall
pub fn cast_as<V, I>(expr: V, iden: I) -> FunctionCall
Call CAST function with a custom type.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::cast_as("hello", "MyType"))
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT CAST('hello' AS MyType)"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT CAST('hello' AS MyType)"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CAST('hello' AS MyType)"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT CAST('hello' AS MyType)"#
);pub fn cast_as_quoted<V, I>(expr: V, type: I) -> FunctionCall
pub fn cast_as_quoted<V, I>(expr: V, type: I) -> FunctionCall
Call CAST function with a case-sensitive custom type.
Type can be qualified with a schema name.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::cast_as_quoted("hello", "MyType"))
.to_owned();
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT CAST('hello' AS `MyType`)"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CAST('hello' AS "MyType")"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT CAST('hello' AS "MyType")"#
);
// Also works with a schema-qualified type name:
let query = Query::select()
.expr(Func::cast_as_quoted("hello", ("MySchema", "MyType")))
.to_owned();
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT CAST('hello' AS `MySchema`.`MyType`)"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT CAST('hello' AS "MySchema"."MyType")"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT CAST('hello' AS "MySchema"."MyType")"#
);pub fn coalesce<I, T>(args: I) -> FunctionCall
pub fn coalesce<I, T>(args: I) -> FunctionCall
Call COALESCE function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::coalesce([
Query::select()
.from(Char::Table)
.expr(Func::max(Expr::col(Char::SizeW)))
.take()
.into(),
Expr::col(Char::SizeH),
Expr::val(12),
]))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT COALESCE((SELECT MAX([size_w]) FROM [character]), [size_h], 12) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT COALESCE((SELECT MAX(`size_w`) FROM `character`), `size_h`, 12) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT COALESCE((SELECT MAX("size_w") FROM "character"), "size_h", 12) FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT COALESCE((SELECT MAX("size_w") FROM "character"), "size_h", 12) FROM "character""#
);pub fn lower<T>(expr: T) -> FunctionCall
pub fn lower<T>(expr: T) -> FunctionCall
Call LOWER function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::lower(Expr::col(Char::Character)))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT LOWER([character]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT LOWER(`character`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT LOWER("character") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT LOWER("character") FROM "character""#
);use sea_query::{tests_cfg::*, *};
let query = Query::select()
.column(Font::Id)
.from(Font::Table)
.and_where(Func::lower(Expr::col(Font::Name)).eq("abc".trim().to_lowercase()))
.take();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [id] FROM [font] WHERE LOWER([name]) = 'abc'"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
"SELECT `id` FROM `font` WHERE LOWER(`name`) = 'abc'"
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT "id" FROM "font" WHERE LOWER("name") = 'abc'"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT "id" FROM "font" WHERE LOWER("name") = 'abc'"#
);pub fn upper<T>(expr: T) -> FunctionCall
pub fn upper<T>(expr: T) -> FunctionCall
Call UPPER function.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::upper(Expr::col(Char::Character)))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT UPPER([character]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT UPPER(`character`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT UPPER("character") FROM "character""#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT UPPER("character") FROM "character""#
);pub fn bit_and<T>(expr: T) -> FunctionCall
pub fn bit_and<T>(expr: T) -> FunctionCall
Call BIT_AND function, this is not supported on SQLite.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::bit_and(Expr::col(Char::FontSize)))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT BIT_AND([font_size]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT BIT_AND(`font_size`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT BIT_AND("font_size") FROM "character""#
);pub fn bit_or<T>(expr: T) -> FunctionCall
pub fn bit_or<T>(expr: T) -> FunctionCall
Call BIT_OR function, this is not supported on SQLite.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::bit_or(Expr::col(Char::FontSize)))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT BIT_OR([font_size]) FROM [character]"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT BIT_OR(`font_size`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT BIT_OR("font_size") FROM "character""#
);pub fn round<A>(expr: A) -> FunctionCall
pub fn round<A>(expr: A) -> FunctionCall
Call ROUND function.
§Examples
use sea_query::tests_cfg::Character::Character;
use sea_query::{tests_cfg::*, *};
let query = Query::select().expr(Func::round(5.654)).to_owned();
assert_eq!(query.to_string(MsSqlQueryBuilder), r#"SELECT ROUND(5.654)"#);
assert_eq!(query.to_string(MysqlQueryBuilder), r#"SELECT ROUND(5.654)"#);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT ROUND(5.654)"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT ROUND(5.654)"#
);pub fn round_with_precision<A, B>(a: A, b: B) -> FunctionCall
pub fn round_with_precision<A, B>(a: A, b: B) -> FunctionCall
Call ROUND function with the precision.
§Examples
use sea_query::tests_cfg::Character::Character;
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::round_with_precision(5.654, 2))
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT ROUND(5.654, 2)"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT ROUND(5.654, 2)"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT ROUND(5.654, 2)"#
);
assert_eq!(
query.to_string(SqliteQueryBuilder),
r#"SELECT ROUND(5.654, 2)"#
);pub fn random() -> FunctionCall
pub fn random() -> FunctionCall
Call RANDOM function.
§Examples
use sea_query::tests_cfg::Character::Character;
use sea_query::{tests_cfg::*, *};
let query = Query::select().expr(Func::random()).to_owned();
assert_eq!(query.to_string(MsSqlQueryBuilder), r#"SELECT RANDOM()"#);
assert_eq!(query.to_string(MysqlQueryBuilder), r#"SELECT RAND()"#);
assert_eq!(query.to_string(PostgresQueryBuilder), r#"SELECT RANDOM()"#);
assert_eq!(query.to_string(SqliteQueryBuilder), r#"SELECT RANDOM()"#);pub fn md5<T>(expr: T) -> FunctionCall
pub fn md5<T>(expr: T) -> FunctionCall
Call MD5 function, this is only available in Postgres and MySQL.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.expr(Func::md5(Expr::col((Char::Table, Char::Character))))
.from(Char::Table)
.to_owned();
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT MD5(`character`.`character`) FROM `character`"#
);
assert_eq!(
query.to_string(PostgresQueryBuilder),
r#"SELECT MD5("character"."character") FROM "character""#
);