内置SQL函数
huiche只负责函数转译,部分函数在不同数据库实际行为可能存在差异,支持的函数有限,只有常见的, 如果需要,你可以自定义,参考自定义SQL
说明
{}代表参数占位符, 如无特殊说明的情况下, 一个{}代表一个参数,仅部分函数会有说明,{}可能为可变参数,动态适配- huiche的SQL函数本质上就是
Expression,不过根据实际函数,部分函数会返回为Condition(可以认为是布尔表达式)
ABS()绝对值
Sql.abs()调用,实际SQL为ABS({}), 所有方言均支持
ANY_VALUE()任一值
Sql.anyValue()调用
DB2,MariaDB,SQLite,SQLServer 不支持,实际使用MIN({}) 模拟
其他数据库 SQL为ANY_VALUE({})
AVG()平均值
Sql.avg()调用,实际SQL为AVG({}), 所有方言均支持
CEILING()向上取整
Sql.ceiling()调用
Oracle 实际SQL为CEIL({})`
其他数据库 实际SQL为CEILING({})
CHAR_LENGTH()字符长度
Sql.charLength()调用
说明
Oracle,SQLite实际SQL为LENGTH({})SQLServer实际SQL为LEN({})- 其他数据库 SQL为
CHAR_LENGTH({})
WARNING
注意 所有数据库行为可能根据编码等结果不一致
COALESCE()空值替换
Sql.coalesce()调用,实际SQL为COALESCE({}), 所有方言均支持
CONCAT()字符串拼接
Sql.concat()调用,实际SQL为CONCAT({}), 所有方言均支持
其中{}为可变参数,可传入多个,但部分数据库受限,比如Oracle只支持2个参数
COUNT()计数
Sql.count()调用,实际SQL为COUNT({})/COUNT(*)/COUNT(DISTINCT {}), 所有方言均支持
FLOOR()向下取整
Sql.floor()调用,实际SQL为FLOOR({}), 所有方言均支持
JSON_EXISTS()JSON路径存在判断
Sql.jsonExists()调用,path为$开头的形式
说明
MySQL实际SQL为JSON_CONTAINS_PATH({}, 'one', {})SQLServer实际SQL为JSON_PATH_EXISTS({}, {}) = 1SQLite实际SQL为JSON_EXTRACT({}, {}) IS NOT NULLH2,HSQL不支持- 其他数据库 实际SQL为
JSON_EXISTS({},{})
JSON_VALUE()JSON路径取值
Sql.jsonValue()调用,path为$开头的形式
说明
SQLite实际SQL为JSON_EXTRACT({},{})H2,HSQL不支持- 其他数据库 实际SQL为
JSON_VALUE({},{})
LOWER()小写
Sql.lower()调用,实际SQL为LOWER({}), 所有方言均支持
MAX()最大值
Sql.max()调用,实际SQL为MAX({}), 所有方言均支持
MIN()最小值
Sql.min()调用,实际SQL为MIN({}), 所有方言均支持
MOD() 取余
Sql.mod()调用
SQLServer 不支持,通过取余操作符({} % {}) 模拟, 因为本身是作为函数,优先级高,所以添加了()
其他数据库 SQL为MOD({})
NULLIF()等值置空
Sql.nullIf()调用,实际SQL为NULLIF({},{}), 所有方言均支持
OCTET_LENGTH()字节长度
Sql.octetLength()调用
说明
Oracle实际SQL为LENGTHB({})SQLServer实际SQL为DATALENGTH({})- 其他数据库 SQL为
OCTET_LENGTH({})
注意 所有数据库行为可能根据编码,校对规则等结果不一致
POSITION()获取子串下标
Sql.position()调用
说明
Oracle,SQLite实际SQL为INSTR({}, {}),已适配参数顺序SQLServer实际SQL为CHARINDEX({},{})- 其他数据库 SQL为
POSITION({} IN {})
REGEXP_LIKE()正则匹配
Sql.regexpLike()调用
说明
MariaDB不支持此函数,使用操作符替代,实际SQL为({} REGEXP {}),为了保证执行顺序一致,添加了()SQLite不支持- 其他数据库 实际SQL为
REGEXP_LIKE({}, {})
不同数据库实际对正则支持可能存在差异
REPLACE()替换字符串
Sql.replace()调用,实际SQL为REPLACE({}, {}, {}), 所有方言均支持
ROUND()四舍五入
Sql.round()调用,实际SQL为ROUND({}), 所有方言均支持
ROW()行构造器
Sql.row()调用
说明
DB2,DM,Oracle,SQLite实际SQL为({})SQLServer不支持- 其他数据库 SQL为
ROW({}) - 所有数据库
{}均为可变参数,可传入多个,自动适配
STRING_AGG()字符串聚合
Sql.stringAgg()调用
说明
DB2,DM,Oracle实际SQL为LISTAGG({}, {})MySQL实际SQL为GROUP_CONCAT({} SEPARATOR {})- 其他数据库 SQL为
STRING_AGG({}, {})
STRING_AGG_DISTINCT()字符串去重聚合
Sql.stringAggDistinct()调用
说明
DB2,DM,Oracle实际SQL为LISTAGG(DISTINCT {}, {})MySQL实际SQL为GROUP_CONCAT(DISTINCT {} SEPARATOR {})Oracle,SQLServer,HSQL,SQLite不支持- 其他数据库 SQL为
STRING_AGG(DISTINCT {}, {})
SUBSTRING()分割字符串
Sql.substring()调用
Oracle 实际SQL为SUBSTR({}, {}, {})
其他数据库 SQL为SUBSTRING({}, {}, {})
SUM()求和
Sql.sum()调用,实际SQL为SUM({}), 所有方言均支持
TRIM()去两端空白字符
Sql.trim()调用,实际SQL为TRIM({}), 所有方言均支持
UPPER()大写
Sql.upper()调用,实际SQL为UPPER({}), 所有方言均支持
()括号包裹
Sql.paren()调用,实际SQL为({}), 所有方言均支持