SAPHANA学习(19):SQL Function(S)
/*
121. SCORE
SCORE()
Returns the relevance of a record that has been found.
*/
SELECT SCORE(),"Content" FROM SEARCH_TEXT WHERE CONTAINS("Content", 'cap', LINGUISTIC); SELECT SCORE(), "Content" FROM SEARCH_TEXT WHERE CONTAINS("Content", 'ca',Fuzzy(0.8));
/*
122. SECOND
SECOND(<time>)
返回时间的second
SECONDS_BETWEEN(<date_1>, <date_2>)
返回两个日期之间秒数
*/
SELECT SECOND ('12:34:56') FROM DUMMY; SELECT SECOND ('2014-03-25 12:34:56.789') FROM DUMMY; SELECT SECONDS_BETWEEN ('2009-12-05', '2010-01-05') FROM DUMMY;
/*
123. SERIES_DISAGGREGATE
SERIES_DISAGGREGATE(
{SERIES TABLE <source_series_table> | <source_increment_by>},
{SERIES TABLE <generate_series_table> | <target_increment_by>}
[, <min_value> [, <max_value>]] )
| { SERIES_DISAGGREGATE_TINYINT
| SERIES_DISAGGREGATE_SMALLINT
| SERIES_DISAGGREGATE_INTEGER
| SERIES_DISAGGREGATE_BIGINT
| SERIES_DISAGGREGATE_SMALLDECIMAL
| SERIES_DISAGGREGATE_DECIMAL
| SERIES_DISAGGREGATE_TIME
| SERIES_DISAGGREGATE_DATE
| SERIES_DISAGGREGATE_SECONDDATE
| SERIES_DISAGGREGATE_TIMESTAMP }
(source_increment_by, target_increment_by, min_value, max_value)
<source_series_table>等距序列table
<source_series_table> ::= <identifier>
<source_increment_by> ::= <real_const> | <datetime_const>
<generate_series_table> ::= <identifier>
<target_increment_by> ::= <real_const> | <datetime_const>
<min_value> ::= <real_const> | <datetime_const>
<max_value> ::= <real_const> | <datetime_const>
*/
CREATE COLUMN TABLE TEST_SOURCE_SERIES(id INT, ts TIMESTAMP, val DECIMAL(8,2)) SERIES(SERIES KEY(id ) EQUIDISTANT INCREMENT BY INTERVAL 1 YEAR MINVALUE '1999-01-01' MAXVALUE '2003-01-01' PERIOD FOR SERIES (ts)); CREATE COLUMN TABLE TEST_TARGET_SERIES(id INT, ts TIMESTAMP, val DECIMAL(8,2)) SERIES(SERIES KEY(id ) EQUIDISTANT INCREMENT BY INTERVAL 3 MONTH MINVALUE '1999-01-01' MAXVALUE '2001-01-01' PERIOD FOR SERIES (ts)); INSERT INTO TEST_TARGET_SERIES(id , ts, val) SELECT id, GENERATED_PERIOD_START AS ts, val * FRACTION_OF_SOURCE_PERIOD AS val FROM SERIES_DISAGGREGATE(SERIES TABLE TEST_SOURCE_SERIES, SERIES TABLE TEST_TARGET_SERIES) SD JOIN TEST_SOURCE_SERIES S ON source_period_start = ts ORDER BY id, ts; SELECT * FROM SERIES_DISAGGREGATE_DATE('INTERVAL 1 year', 'INTERVAL 3 MONTH', '1999-01-01', '2001-01-04' ); SELECT * from SERIES_DISAGGREGATE( SERIES TABLE TEST_SOURCE_SERIES, SERIES TABLE TEST_TARGET_SERIES);
/*
124. SERIES_ELEMENT_TO_PERIOD
SERIES_ELEMENT_TO_PERIOD( <element_number>, { <increment_by>, <min_value>, <max_value> | SERIES TABLE <series_table> } )
<element_number> ::= INTEGER
<increment_by> ::= <real_const> | <interval_const>
<min_value> ::= <real_const> | <datetime_const>
<max_value> ::= <real_const> | <datetime_const>
<element_number>生成序列中数字个数;
<increment_by>步长;
*/
--对应序列[0,2,4,6,8],返回8 SELECT SERIES_ELEMENT_TO_PERIOD(5, 2, 0, 10) FROM DUMMY; --[1,2.25,3.50,4.75,6.00,7.25],返回7.25 SELECT SERIES_ELEMENT_TO_PERIOD(6, 1.25, 1, 10) FROM DUMMY; --返回2014/01/07 SELECT SERIES_ELEMENT_TO_PERIOD(7, 'INTERVAL 1 DAY', '2014-01-01', '2014-12-31') FROM DUMMY; --返回1,1999-01-07和1999-01-01,间来年1 SELECT SERIES_PERIOD_TO_ELEMENT('1999-01-07',SERIES TABLE TEST_SOURCE_SERIES) FROM DUMMY; --SECOND间隔 SELECT SERIES_ELEMENT_TO_PERIOD(500000, 'INTERVAL 1.5 SECOND', '2014-01-01 00:00:00.000', '2014-12-31') FROM DUMMY;
/*
125. SERIES_FILTER
SERIES_FILTER(<filter_parameter> => <expression> [, <filter_parameter> => <expression> ... ])
OVER (
[ <series_definition> | <series_reference> ]
[ <window_partition_by_clause> ]
[ ORDER BY <window_order_by_expression> ]
[ <window_frame_clause> ]
)
<filter_parameter> ::= VALUE | METHOD_NAME | ALPHA | BETA
VALUE:是必须参数,指定应用筛选器列,列必须是数字类型,不能为null值
METHOD_NAME:必须参数,指定filter method,SINGLESMOOTH or DOUBLESMOOTH
ALPHA:可选,默认0.1,0-1,the level of the series ;
BETA:可选,默认0.1,0-1,the trend of the series;
<window_partition_by_clause> ::= PARTITION BY <expression> [ { , <expression> } ... ]
<window_frame_clause> ::= <window_frame_unit> <window_frame_extent>
<window_frame_unit> ::= ROWS
<window_frame_extent> ::= <window_frame_start> | <window_frame_between>
<window_frame_start> ::= UNBOUNDED PRECEDING | <window_frame_preceding> | CURRENT ROW
<window_frame_preceding> ::= <unsigned_integer> PRECEDING
<window_frame_between> ::= BETWEEN <lower_window_frame_bound> AND <upper_window_frame_bound>
<lower_window_frame_bound> ::= <window_frame_bound>
<upper_window_frame_bound> ::= <window_frame_bound>
<window_frame_bound> := <window_frame_start> | UNBOUNDED FOLLOWING | <window_frame_following>
<window_frame_following> ::= <unsigned_integer> FOLLOWING
*/
CREATE COLUMN TABLE TEST_FILTER_SERIES (ts DATE, temperature FLOAT); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-01', 0); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-02', 3); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-03', 4.5); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-04', 6); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-05', 6.3); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-06', 6.9); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-07', NULL); INSERT INTO TEST_FILTER_SERIES VALUES('2014-01-08', NULL); SELECT ts, temperature, SERIES_FILTER( VALUE => temperature, METHOD_NAME => 'SINGLESMOOTH', ALPHA => 0.2) OVER (ORDER BY ts) AS SES, SERIES_FILTER( VALUE => temperature, METHOD_NAME => 'DOUBLESMOOTH', ALPHA => 0.2, BETA => 0.3) OVER (ORDER BY ts) AS DES FROM TEST_FILTER_SERIES;
/*
126. SERIES_GENERATE
SERIES_GENERATE( SERIES TABLE <table_name> [, <min_value> [, <max_value> ]] )
| SERIES_GENERATE_<generation_spec>
Generates a complete series table based on the specified series definition.
<generation_spec> ::= <data_type> <generate_parameters>
<data_type> ::= TINYINT | SMALLINT | INTEGER | BIGINT | SMALLDECIMAL | DECIMAL | TIME | DATE | SECONDDATE | TIMESTAMP
<generate_parameters> ::=
( <increment_by>, <min_value>, <max_value> )
<increment_by> ::= { <numeric_literal> | INTERVAL <date_literal> }
<table_name> ::= <identifier>
<min_value> ::= <numeric_literal> | <date_literal>
<max_value> ::= <numeric_literal> | <date_literal>
*/
--生成range改变表[0->2.5->5->7.5->10],0~10,间隔2.5 SELECT * FROM SERIES_GENERATE_DECIMAL(2.5, 0, 10); --生成range改变表[1->3->5],1~5,间隔2 SELECT * FROM SERIES_GENERATE_INTEGER(2, 1, 5); --生成range改变表,1999-01-01~1999-01-02,间隔30秒 SELECT * FROM SERIES_GENERATE_TIMESTAMP('INTERVAL 30 SECOND', '1999-01-01', '1999-01-02'); --创建等距SERIES表 CREATE COLUMN TABLE TEST_SERIES_GENERATE ( profile_id INT, ts TIMESTAMP, consumption DECIMAL(4,3)) SERIES( SERIES KEY(profile_id) PERIOD FOR SERIES(ts) EQUIDISTANT INCREMENT BY INTERVAL 1 HOUR MISSING ELEMENTS ALLOWED MINVALUE '2010-01-01' MAXVALUE '2015-01-01'); --2010-01-01~2015-01-01,间隔1hour SELECT * FROM SERIES_GENERATE_TIMESTAMP(SERIES TABLE TEST_SERIES_GENERATE); --创建等距SERIES表 CREATE COLUMN TABLE TEST_SERIES_GENERATE1(id INTEGER, pos INTEGER) SERIES( SERIES KEY(id) PERIOD FOR SERIES(pos) EQUIDISTANT INCREMENT BY 1 MINVALUE 1 MAXVALUE 5 ); --[1->2->3->4->5], 1~5,间隔1 SELECT * FROM SERIES_GENERATE(SERIES TABLE TEST_SERIES_GENERATE1);
/*
127. SERIES_PERIOD_TO_ELEMENT
SERIES_PERIOD_TO_ELEMENT(
<value>, {<increment_by>, <min_value>, <max_value> [, <rounding_mode>]
| SERIES TABLE <series_table> [, <rounding_mode>]}
)
Returns the one-based series element number with which the given period value is associated,
where period = min_value + ( element - 1 ) * interval.
<value> ::= INTEGER | DOUBLE | TIMESTAMP
<increment_by> ::= <identifier>
<min_value> ::= <integer>
<max_value> ::= <integer>
<rounding_mode> ::= ROUND_HALF_UP| ROUND_HALF_DOWN | ROUND_HALF_EVEN | ROUND_UP | ROUND_DOWN | ROUND_CEILING| ROUND_FLOOR
*/
--0->2->4->6->8,返回中间值4 SELECT SERIES_PERIOD_TO_ELEMENT(5, 2, 0, 10, ROUND_HALF_UP) FROM DUMMY; --0->2->4->6->8,返回3? SELECT SERIES_PERIOD_TO_ELEMENT(5, 2, 0, 10, ROUND_HALF_DOWN) FROM DUMMY; --返回3? SELECT SERIES_PERIOD_TO_ELEMENT(5, 2, 0, 10, ROUND_HALF_EVEN) FROM DUMMY; --返回4 SELECT SERIES_PERIOD_TO_ELEMENT(5, 2, 0, 10, ROUND_UP) FROM DUMMY; --返回3 SELECT SERIES_PERIOD_TO_ELEMENT(5, 2, 0, 10, ROUND_DOWN) FROM DUMMY; --返回4,2014-01到2014-04,间隔月份, SELECT SERIES_PERIOD_TO_ELEMENT( '2014-04-01 12:00:00','INTERVAL 1 MONTH','2014-01-01','2014-12-31', ROUND_HALF_DOWN) FROM DUMMY;
/*
128. SERIES_ROUND
SERIES_ROUND( <value>, { <increment_by> | SERIES TABLE <series_table> } [, <rounding_mode> [, <alignment_expression> ] ] )
Rounds a specified value to the series value using the specified rounding settings.
<value> ::= { <real_const> | <datetime_const> }
<increment_by>::= <interval_const>
<series_table> ::= <identifier>
<rounding_mode> ::= ROUND_HALF_UP| ROUND_HALF_DOWN | ROUND_HALF_EVEN | ROUND_UP | ROUND_DOWN | ROUND_CEILING | ROUND_FLOOR
<alignment_expression> ::= { <real_const> | <datetime_const> }
<increment_by>和SERIES TABLE <series_table>选一
*/
SELECT SERIES_ROUND(4.5, 3, ROUND_HALF_UP) FROM DUMMY; SELECT SERIES_ROUND(4.5, 3, ROUND_HALF_DOWN) FROM DUMMY; SELECT SERIES_ROUND('2013-05-24', 'INTERVAL 1 YEAR', ROUND_DOWN) FROM DUMMY; CREATE COLUMN TABLE TEST_SERIES_ROUND(id INTEGER, pos INTEGER) SERIES( SERIES KEY(id) EQUIDISTANT INCREMENT BY 3 PERIOD FOR SERIES(pos)); SELECT SERIES_ROUND(4.5, SERIES TABLE TEST_SERIES_ROUND, ROUND_HALF_DOWN) FROM DUMMY;
/*
129. SESSION_CONTEXT
SESSION_CONTEXT(<session_variable>)
Returns the value of the specified session variable assigned to the current user.
<session_variable> 可以预定义,用户自定义
SET [SESSION] <variable_name> = <value>
UNSET [SESSION] <variable_name>
SESSION_USER
Returns the user name of the current session.
*/
SELECT SESSION_CONTEXT('APPLICATION') FROM DUMMY; SELECT SESSION_USER FROM DUMMY;
/*
130. SIGN
SIGN(<number>)
Returns the sign (positive or negative) of the specified numeric argument.
正数返回1,负数返回-1,0返回0,null返回null
*/
SELECT SIGN (-15) FROM DUMMY; SELECT SIGN (1) FROM DUMMY; SELECT SIGN (0) FROM DUMMY; SELECT SIGN (null) FROM DUMMY;
/*
131.SIN
SIN(<number>)
返回sin x三角函数值
SINH(<number>)
返回以弧度表示的角度的双曲正弦值
*/
--sin (pi/2) = 1 SELECT SIN ( 3.141592653589793/2) FROM DUMMY; --sin1,弧度,pi约等于3.14, SELECT SIN (1) FROM DUMMY; --近似于弧度1,sin1,sin(pi/3) SELECT SIN (3.1415926/3) FROM DUMMY; --双曲正弦值 SELECT SINH (0.0) FROM DUMMY;
/*
132.SOUNDEX
SOUNDEX(<string>)
Converts alphabet characters into a sound code that represents their sound.
*/
--不存在? --SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') FROM DUMMY;
/*
133.SQRT
SQRT(<number>)
返回平方根
*/
SELECT SQRT(2) FROM DUMMY;
/*
134. STDDEV
Aggregate function:
STDDEV( [ ALL | DISTINCT ] <expression> )
Window function:
STDDEV( <expression> ) <window_specification>
Returns the standard deviation of the given expression as the square root of the VAR function.
STDDEV_POP(<expression>)
Returns the standard deviation of the given expression as the square root of the VAR_POP function.
STDDEV_SAMP(<expression>)
Returns the standard deviation of the given expression as the square root of VAR_SAMP function.
SELECT STDDEV("Price") FROM "MyProducts"; SELECT STDDEV_POP("Price") FROM "MyProducts"; SELECT STDDEV_SAMP("Price") FROM "MyProducts";
*/
/*
135. STRING_AGG
STRING_AGG( <expression>[, <delimiter> ] [ <order_by_clause> ] )
字符串连接
<order_by_clause> ::= ORDER BY <order_by_expression> [, <order_by_expression> [,...] ]
<order_by_expression> ::=
<column_name> [ <collate_clause> ] [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
| <column_position> [ <collate_clause> ] [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
<collate_clause> ::= COLLATE <collation_name>
*/
CREATE ROW TABLE TEST_STRING(ID INT, STR VARCHAR(20), GRP INT); INSERT INTO TEST_STRING VALUES (3,'str2',0); INSERT INTO TEST_STRING VALUES (0,'str1',0); INSERT INTO TEST_STRING VALUES (NULL,'NULL',0); INSERT INTO TEST_STRING VALUES (5,'str3',0); INSERT INTO TEST_STRING VALUES (3,'val3',1); INSERT INTO TEST_STRING VALUES (6,'val6',1); INSERT INTO TEST_STRING VALUES (NULL,'NULL',1); INSERT INTO TEST_STRING VALUES (1,'val1',1); SELECT GRP,STRING_AGG(STR,'&') AS STR_AGG FROM TEST_STRING GROUP BY "GRP";
/*
136. STRTOBIN
STRTOBIN(<string>, <codepage>)
字符串转换为二进制
*/
SELECT STRTOBIN ('Ant', 'UTF-16BE') FROM DUMMY; SELECT STRTOBIN ('Ant', 'UTF-8') FROM DUMMY; SELECT STRTOBIN ('Ant', 'GBK') FROM DUMMY;
/*
137. SUBARRAY
SUBARRAY(<array_value_expression>, <start_position> , <length>)
获取指定长度array
*/
SELECT SUBARRAY(VAL, 1, 2) FROM ARRAY_TEST;
/*
138. SUBSTR_AFTER
SUBSTR_AFTER(<string>, <pattern>)
返回字符串<string>匹配<pattern>之后字符串
SUBSTR_BEFORE(<string>, <pattern>)
返回字符串<string>匹配<pattern>之前字符串
SUBSTR[ING]_REGEXPR( <pattern> [ FLAG <flag> ] IN <regex_subject_string>
[ FROM <start_position> ]
[ OCCURRENCE <regex_occurrence> ]
[ GROUP <regex_capture_group> ] )
正则表达式匹配
<pattern>正则表达式
<flag>:模式,i:大小写不敏感;m:多行模式;s:<.>可以匹配任意字符;x:regex表达式支持空格
<flag> ::= 'i' | 'm' | 's' | 'x'
<regex_subject_string> ::= <string>
被匹配的字符串
<start_position> ::= <numeric_literal>
开始位置
<regex_occurrence> ::= <numeric_literal >
匹配次数
<regex_capture_group> ::= <integer>
返回第几分组数
SUBSTRING(<string>, <start_position> [, <string_length>])
字符串切割
*/
--返回Friend SELECT SUBSTR_AFTER ('Hello My Friend','My') FROM DUMMY; --返回null SELECT SUBSTR_AFTER ('Hello My Friend',null) FROM DUMMY; --返回Hello SELECT SUBSTR_BEFORE ('Hello My Friend','My') FROM DUMMY; --返回01 SELECT SUBSTR_REGEXPR('([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})' IN '20140401' GROUP 3) FROM DUMMY; --切割字符串 SELECT SUBSTRING(x'ABCDEF',1,2) FROM DUMMY; SELECT SUBSTRING ('1234567890',4,2) "substring" FROM DUMMY;
/*
139.SUM
Aggregate function:
SUM( [ ALL | DISTINCT ] <expression> )
Window function:
SUM( <expression> ) <window_specification>
求和
*/
SELECT SUM("Quantity") FROM "MyProducts" WHERE "Product_Name" IN ('Jackets', 'Coats');
/*
140.SYSUUID
Returns a new universally unique identifier that is generated by the connected SAP HANA instance.
*/
SELECT SYSUUID FROM DUMMY;
本文来自博客园,作者:渔歌晚唱,转载请注明原文链接:https://www.cnblogs.com/tangToms/p/13906048.html