字符串、数学及用户定义函数
字符串和数学函数常用于修改、转换或计算从 SQL 查询返回的结果集中的派生值,或者在 SQL 插入或更新操作中赋值。以下表格列出了内置函数:
函数 | 参数类型 | 返回类型 | 说明 |
---|---|---|---|
abs(i) | integer | integer | 参数的绝对值 |
abs(r) | real | real | 参数的绝对值 |
sin(r) | real | real | 正弦(弧度) |
cos(r) | real | real | 余弦(弧度) |
tan(r) | real | real | 正切(弧度) |
asin(r) | real | real | 反正弦 |
acos(r) | real | real | 反余弦 |
atan(r) | real | real | 反正切 |
exp(r) | real | real | 指数幂 |
log(r) | real | real | 自然对数 |
ceil(r) | real | real | 不小于 r 的最小整数值 |
floor(r) | real | real | 不小于 r 的最大整数值 |
integer(r) | real | integer | 实数到整数的转换 |
integer(s) | string | integer | 字符串到整数的转换 |
length(a) | array | integer | 数组中的元素数量 |
length(s) | string | integer | 字符串的长度 |
lower(s) | string | string | 字符串小写 |
real(i) | integer | real | 整数到实数的转换 |
real(s) | string | real | 字符串到实数的转换 |
string(i) | integer | string | 整数转字符串 |
string(r) | real | string | 将实数转换为字符串 |
substr(s,m[,n]) | string,integer[,integer] | string | 从字符串 s 的第 m 个字符开始,长度为 n 的子字符串(如果省略 n,则到字符串末尾) |
upper | string | string | 字符串大写 |
内置函数可以从普通的 SQL 选择语句中调用,如下所示:
select string(age) from Persons;
select upper(name) from Persons;
select abs(amount) from Contributions;
用户定义函数
SmartESQL 还允许开发人员创建自己的用户定义函数。用户定义函数(UDF)必须定义为返回类型为“static String*
”,并且可以接受类型为“Value*
”的参数。然后,必须通过声明类型为“static SqlFunctionDeclaration udf()
”的函数,并指定返回类型、用于调用的名称、指向函数的指针以及所需的参数数量,将其“注册”到 SmartESQL 运行时环境中。
// 声明并实例化用户自定义的 DateFormat 函数
static String* dateformat( McoSql::Value* date)
{
char str[64];
int date_val = (int)date->intValue();
int yy = date_val / 10000;
int mm = date_val / 100 % 100;
int dd = date_val % 100;
// 格式dd.mm.yyyy假设所有日期都在2000年之后
sprintf( str, "%d.%d.20%02d", dd, mm, yy );
return String::create( str );
}
static SqlFunctionDeclaration udf
(
tpString, // tpInt 是用户自定义函数的返回值。
"dateformat", // 我们在查询中使用的函数名称
(void*)dateformat, // 函数指针
1 // 用户定义函数(UDF)的参数数量
);
然后,可以在普通的 SQL 选择语句中调用该用户定义函数(UDF)。
例如,以下语句通过调用 UDF 来格式化结果集中的日期值:
select dateformat(date_val) from Contributions;