zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    快手2019秋招--魔法深渊
    mutiset的简单介绍转载
    端午遥想
    UVA 11291
    Amicable numbers -- Javascript 实现
    iOS Dev (54) 键盘弹出后收起时View随之移动
    webapp设置适应pc和手机的页面宽高以及布局层叠图片文字
    shu_1180 回文数(一)
    开发微信公众平台--新建新浪云sae部署server
    C++
  • 原文地址:https://www.cnblogs.com/tangToms/p/13906048.html
Copyright © 2011-2022 走看看