语法:
CE_CALC ('', ) 语法元素:
::= 指定要评估的表达式。使用以下语法分析表达式:
or' b1)*
and' b2)*
not' b2 | e (('<' | '>' | '=' | '<=' | '>=' | '!=') e)*
如果语法中的终端被括起来,例如 'token'(在语法中用 id 表示),则它们类似于 SQL 标识符。此规则的例外是将不带引号的标识符转换为小写。数字常量的编写方式基本上与 C 编程语言相同,字符串常量用单引号引起来,例如“字符串”。在字符串中,单引号由另一个单引号转义。
在此语法中有效的示例表达式为: "col1" < ("col2" + "col3")。有关表达式函数的完整列表,请参阅下表。
::= DATE | TIME | SECONDDATE | TIMESTAMP | TINYINT
| SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL
| REAL | DOUBLE | VARCHAR | NVARCHAR | ALPHANUM
| SHORTTEXT | VARBINARY | BLOB | CLOB | NCLOB | TEXT
将表达式的结果类型指定为 SQL 类型
描述:
CE_CALC 用于其它关系运算符中。它计算表达式,然后通常绑定到新列。一个重要的用例是对 CE_PROJECTION 运算符中的表达式求值。CE_CALC 函数具有两个参数:
支持以下表达式函数:
表达式函数名称描述语法转换函数数据类型之间的转换浮点将 arg 转换为浮点数据类型。float float(arg)双精度将 arg 转换为双精度数据类型。double double(arg)decfloat将 arg 转换为 decfloat 数据类型。decfloat decfloat(arg)固定将 arg 转换为固定数据类型。固定固定(arg, int, int)字符串将 arg 转换为字符串数据类型。字符串 (arg)日期将 arg 转换为 daydate 数据类型。1daydate(stringarg), daydate daydate(fixedarg)字符串函数字符串上的函数charpos返回字符串中第 n 个字符的从 1 开始的位置。该字符串解释为使用 UTF-8 字符编码charpos(string, int)字符返回 UTF-8 字符串中的字符数。在 CESU-8 编码字符串中,此函数返回字符串使用的 16 位单词的数量,就像字符串使用 UTF-16 编码一样。chars(string)strlen返回字符串的长度(以字节为单位),以整数 number.1 表示int strlen(string)midstr返回字符串的一部分,从 arg2 开始,长度为 arg3 字节。arg2 从 1(非 0)开始计数。2string midstr(string, int, int)左字符串返回 arg1 左侧的 arg2 字节。如果 arg1 短于 arg2 的值,则返回完整的字符串。1string leftstr(string, int)右对齐返回 arg1 右侧的 arg2 字节。如果 arg1 短于 arg2 的值,则返回完整的字符串。1string rightstr(string, int)指令返回第二个字符串在第一个字符串(>= 1)中第一次出现的位置;如果第二个字符串未包含在第一个字符串中,则返回 0。 1int instr(字符串,字符串)Hextoraw将字节的十六进制表示转换为字节字符串。十六进制字符串可以包含 0-9、大写或小写 a-f,字节的两个数字之间不能有空格;字节之间允许有空格。string hextoraw(string)rawtohex将字节字符串转换为十六进制表示。输出将仅包含 0-9 和(大写)A-F,无空格,字节数是原始字符串的两倍。string rawtohex(string)ltrim从字符串中删除空格前缀。可以在可选参数中指定空格字符。此函数在 UTF8-string 的原始字节上运行,不了解多字节代码(不能指定多字节空白字符)。string ltrim(string)string ltrim(string, string)rtrim删除字符串中的尾随空格。可以在可选参数中指定空格字符。此函数在 UTF8-string 的原始字节上运行,不了解多字节代码(不能指定多字节空白字符)。string rtrim(string)string rtrim(string, string)修剪删除字符串开头和结尾的空格字符。允许以下语句:trim(s) = ltrim(rtrim(s))trim(s1, s2) = ltrim(rtrim(s1, s2), s2)string trim(string)string trim(字符串,字符串)lpad在字符串左侧添加空格字符。第二个字符串参数指定将重复添加的空格,直到字符串达到预期长度。如果未指定第二个字符串参数,将添加 chr(32) (' ')。string lpad(string, int)string lpad(string, int, string)rpad在字符串末尾添加空格。第二个字符串参数指定将重复添加的空格,直到字符串达到预期长度。如果未指定第二个字符串参数,将添加 chr(32) (' ')。string rpad(string, int)string rpad(string, int, string)数学函数此处描述的数学函数通常使用浮点值;它们的输入会自动转换为双精度值,输出也将是双精度值。 这些函数的功能与 C 编程语言的功能相同。double log(double)double exp(double)double log10(double)double sin(double)双精度(双精度)double tan(double)双asin(double)double acos(double)double atan(double)double sinh(double)double cosh(double)双层(双)double ceil(double)签名根据参数的符号,返回 -1、0 或 1。Sign 针对所有数字类型、日期和时间实现。int sign(double) 等int sign(date)int 符号(时间)abs如果 arg 为正数或零,则返回 arg,在其它任何情况下返回 -arg。Abs 适用于所有数字类型和时间。int abs(int)。double abs(double)decfloat abs(decfloat)time abs(time)日期函数对日期或时间数据操作的函数utctolocal将 datearg(无时区的日期)解释为 utc,并将其转换为 timezonearg(字符串)指定的时区。iutctolocal(datearg, timezonearg)localtoutc将本地日期时间 datearg 转换为字符串 timezonearg 指定的时区,并返回日期。localtoutc(datearg, timezonearg)工作日以整数形式返回工作日,范围在 0..6. 0 为星期一。weekday(date)现在返回当前日期和时间(服务器时区的本地时间)作为日期。now()Daysbetween返回 date1 和 date2 之间的天数(整数)。这是 date2 - date1 的替代方法。daysbetween(date1, date2)更多功能如果如果将 intarg 视为真(不等于零),则返回 arg2,否则返回 arg3。当前未实施快捷方式评估,这意味着在任何情况下都会评估 arg2 和 arg3。这意味着不能使用 if 避免除零错误,该错误具有在发生表达式评估时终止表达式评估的副作用。if(intarg, arg2, arg3)案例如果 arg1 == cmp1,则返回 value1,如果 arg1 == cmp2,则返回 value2,依此类推。如果没有匹配项,则返回缺省值。case(arg1,默认)case(arg1, cmp1, value1, cmp2, value2, ..., default)为空如果 arg1 设置为空,并且在求值程序运行期间开启了空值检查,则返回 1 (= true)。isnull(arg1)rownum返回当前扫描表结构中的行编号。第一行的编号为 0。rownum() 1 由于日期早于 1582 的日历变化,不建议使用 date 数据类型,应改用 daydate 数据类型。 备注date 基于建议的公历。 daydate 基于公历,也是 SAP HANA SQL 使用的日历。
2 这些计算引擎字符串函数使用单字节字符进行操作。要将这些函数用于多字节字符串,请参阅将字符串函数与多字节字符编码结合使用部分。请注意,本地支持 unicode 字符串的 SAP HANA 数据库的 SQL 函数不存在此限制。