/// SUBSTRING(<expr> [FROM <expr>] [FOR <expr>])
Substring {
expr: Box<Expr>,
substring_from: Option<Box<Expr>>,
substring_for: Option<Box<Expr>>,
},
SELECT TRIM('#! ' FROM ' #SQL Tutorial! ') AS TrimmedString;
/// TRIM([BOTH | LEADING | TRAILING] <expr> [FROM <expr>])\
/// Or\
/// TRIM(<expr>)
Trim {
expr: Box<Expr>,
// ([BOTH | LEADING | TRAILING], <expr>)
trim_where: Option<(TrimWhereField, Box<Expr>)>,
},
/// EXTRACT(DateTimeField FROM <expr>)
Extract {
field: DateTimeField,
expr: Box<Expr>,
},
/// TRY_CAST an expression to a different data type e.g. `TRY_CAST(foo AS VARCHAR(123))`
// this differs from CAST in the choice of how to implement invalid conversions
TryCast {
expr: Box<Expr>,
data_type: DataType,
},