SAP HANA SQL系列六:杂项函数
杂项函数
COALESCE
- COALESCE (expression_list)
- 返回 list 中非 NULL 的表达式。Expression_list 中必须包含至少两个表达式,并且所有表达式都是可比较的。如果所有的参数都为 NULL,则结果也为 NULL。
CREATE TABLE coalesce_example (ID INT PRIMARY KEY, A REAL, B REAL);
INSERT INTO coalesce_example VALUES(1, 100, 80);
INSERT INTO coalesce_example VALUES(2, NULL, 63);
INSERT INTO coalesce_example VALUES(3, NULL, NULL);
SELECT id, a, b, COALESCE (a, b*1.1, 50.0) "coalesce" FROM coalesce_example;
1 100.0 80.0 100.0
2 NULL 63.0 69.30000305175781
3 NULL NULL 50.0
CURRENT_CONNECTION
- CURRENT_CONNECTION
- 返回当前连接 ID。
SELECT CURRENT_CONNECTION "current connection" FROM DUMMY;
current connection
2
CURRENCT_SCHEMA
- CURRENT_SCHEMA
- 返回当前数据集合名。
SELECT CURRENT_SCHEMA "current schema" FROM DUMMY;
current schema
SYSTEM
CURRENT_USER
- CURRENT_USER
- 返回当前语句上下文的用户名,即当前授权堆栈顶部的用户名。
-- example showing basic function operation using SYSTEM user
SELECT CURRENT_USER "current user" FROM DUMMY;
current user
SYSTEM
-- definer-mode procedure declared by USER_A
CREATE PROCEDURE USER_A.PROC1 LANGUAGE SQLSCRIPT SQL SECURITY DEFINER AS
BEGIN
SELECT CURRENT_USER "current user" FROM DUMMY;
END;
-- USER_B executing USER_A.PROC1
CALL USER_A.PROC1;
current user
USER_A
-- invoker-mode procedure declared by USER_A
CREATE PROCEDURE USER_A.PROC2 LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS
BEGIN
SELECT CURRENT_USER "current user" FROM DUMMY;
END;
-- USER_B is executing USER_A.PROC
CALL USER_A.PROC2;
current user
USER_B
GROUPING_ID
- GROUPING_ID(column_name_list)
- GROUPING_ID 函数可以使用 GROUPING SETS 返回单个结果集中的多级聚集。GROUPING_ID 返回一个整数识别每行所在的组集合。GROUPING_ID 每一列必须是 GROUPING SETS 中的元素。
- 通过把生成的位矢量从 GROUPING SETS 转换为十进制数,将位矢量视作二进制数,分配GROUPING_ID。组成位矢量后,0 分配给 GROUPING SETS 指定的每一列,否则根据 GROUPING SETS 出现的顺序分配1。通过将位矢量作为二进制数处理,该函数返回一个整型值作为输出。
SELECT customer, year, product, SUM(sales),
GROUPING_ID(customer, year, product)
FROM guided_navi_tab
GROUP BY GROUPING SETS (
(customer, year, product),
(customer, year),
(customer, product),
(year, product),
(customer),
(year),
(product));
CUSTOMER YEAR PRODUCT SUM(SALES) GROUPING_ID(CUSTOMER,YEAR,PRODUCT)
1 C1 2009 P1 100 0
2 C1 2010 P1 50 0
3 C2 2009 P1 200 0
4 C2 2010 P1 100 0
5 C1 2009 P2 200 0
6 C1 2010 P2 150 0
7 C2 2009 P2 300 0
8 C2 2010 P2 150 0
9 C1 2009 a 300 1
10 C1 2010 a 200 1
11 C2 2009 a 500 1
12 C2 2010 a 250 1
13 C1 a P1 150 2
14 C2 a P1 300 2
15 C1 a P2 350 2
16 C2 a P2 450 2
17 a 2009 P1 300 4
18 a 2010 P1 150 4
19 a 2009 P2 500 4
20 a 2010 P2 300 4
21 C1 a a 500 3
22 C2 a a 750 3
23 a 2009 a 800 5
24 a 2010 a 450 5
25 a a P1 450 6
26 a a P2 800 6
IFNULL
IFNULL (expression1, expression2)
返回输入中第一个不为 NULL 的表达式。
如果 expression1 不为 NULL,则返回 expression1。
如果 expression2 不为 NULL,则返回 expression2。
如果输入表达式都为 NULL,则返回 NULL。
SELECT IFNULL ('diff', 'same') "ifnull" FROM DUMMY;
ifnull
diff
SELECT IFNULL (NULL, 'same') "ifnull" FROM DUMMY;
ifnull
same
SELECT IFNULL (NULL, NULL) "ifnull" FROM DUMMY;
ifnull
NULL
MAP
MAP (expression, search1, result1 [, search2, result2] … [, default_result])
在搜索集合中搜索 expression,并返回相应的结果。
如果未找到 expression 值,并且定义了 default_result,则 MAP 返回 default_result。
如果未找到 expression 值,并且未定义 default_result,MAP 返回 NULL。
注意:
搜索值和相应的结果总是以搜索-结果方式提供。
SELECT MAP(2, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map" FROM DUMMY;
map
Two
SELECT MAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three', 'Default') "map" FROM DUMMY;
map
Default
SELECT MAP(99, 0, 'Zero', 1, 'One', 2, 'Two', 3, 'Three') "map" FROM DUMMY;
map
NULL
NULLIF
- NULLIF (expression1, expression2)
- NULLIF 比较两个输入表达式的值,如果第一个表达式等于第二个,NULLIF 返回 NULL。
- 如果 expression1 不等于 expression2,NULLIF 返回 expression1。
- 如果 expression2 为 NULL,NULLIF 返回 expression1。
SELECT NULLIF ('diff', 'same') "nullif" FROM DUMMY;
nullif
diff
SELECT NULLIF('same', 'same') "nullif" FROM DUMMY;
nullif
NULL
SESSION_CONTEXT
- SESSION_CONTEXT(session_variable)
- 返回分配给当前用户的 session_variable 值。
- 访问的 session_variable 可以是预定义或者用户自定义。预定义的会话变量可以通过客户端设置的有’APPLICATION’, ‘APPLICATIONUSER’以及’TRACEPROFILE’。
- 会话变量可以定义或者修改通过使用命令 SET [SESSION] <variable_name> = ,使用 UNSET [SESSION] <variable_name>取消设置。
- SESSION_CONTEXT 返回最大长度为 512 字符的 NVARCHAR 类型。
读取会话变量:
SELECT SESSION_CONTEXT('APPLICATION') "session context" FROM DUMMY;
session context
HDBStudio
SESSION_USER
- SESSION_USER
- 返回当前会话的用户名。
-- example showing basic function operation using SYSTEM user
SELECT SESSION_USER "session user" FROM DUMMY;
session user
SYSTEM
-- definer-mode procedure declared by USER_A
CREATE PROCEDURE USER_A.PROC1 LANGUAGE SQLSCRIPT SQL SECURITY DEFINER AS
BEGIN
SELECT SESSION_USER "session user" FROM DUMMY;
END;
-- USER_B is executing USER_A.PROC
CALL USER_A.PROC1;
session user
USER_B
-- invoker-mode procedure declared by USER_A
CREATE PROCEDURE USER_A.PROC2 LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS
BEGIN
SELECT SESSION_USER "session user" FROM DUMMY;
END;
-- USER_B is executing USER_A.PROC
CALL USER_A.PROC2;
session user
USER_B
SYSUUID
- SYSUUID
- 返回 SAP HANA 连接实例的 SYSUUID。
SELECT SYSUUID FROM DUMMY;
SYSUUID
4DE3CD576C79511BE10000000A3C2220
post SAP-Garson
原文链接:https://blog.csdn.net/m0_43393325/article/details/121676622文章来自于网络,如果侵犯了您的权益,请联系站长删除!