SAP HANA SQL符合SQL的基本标准,除此之外,为了方便使用,SAP HANA也提供了数量众多的SQL函数供用户使用,本文从整体上介绍SAP HANA提供的SQL函数。本文的测试案例所使用的SAP HANA版本为SAP HANA SPS6 Revision 60.00


         SAP HANA数据表里字段有不同的类型,包括:日期型、数字型、字符串型、二进制型等,与此相对应, SQL函数也可以大体按照数据类型进行分类:1.数据类型转换函数;2.日期函数;3.全文函数;4.数值处理函数;5.字符串函数;6.窗口函数;7.杂项函数。下面将1-4类函数进行一一介绍,在下一篇文章里将介绍最后3类。


1.数据类型转换函数

数据类型转换函数主要用于两个目的:1.将参数从一种类型转换成另一种类型;2.测试一种转换是否成功。类型转换不只是SQL执行的需要,而且你会发现,使用显式的类型转换函数,可以提高性能,这是由于对于不同类型的比较,SAP HANA需要使用隐式类型转换以确保它们是同一种类型才能进行比较,而这种隐式转换是以牺牲性能为代价的,因此使用显式类型转换可提高性能。具体请参见SAP HANA Performance Analysis Guide 3.1节。

由于有不同的数据类型,因此可以想见会有到不同目标类型的转换,由于我们在SQL中使用的最多是字符串,因此大多数类型转换的源类型都是字符串类型。因此我们可以把数据类型转换函数分成以下几类:从字符串型到数值型,如下表


TO_BIGINT

TO_DECIMAL

TO_DOUBLE

TO_INT

TO_INTEGER

TO_REAL

TO_SMALLINT

TO_SMALLDECIMAL

TO_TINYINT


从字符串型到日期型


TO_DATE

TO_DATS

TO_TIME

TO_TIMESTAMP


从字符串型到二进制型


TO_BINARY

TO_BLOB

TO_CLOB

TO_NCLOB

目标类型为字符串型

TO_ALPHANUM

TO_FIXEDCHAR

TO_NVCHAR

TO_VARCHAR

       

        其中有一个函数比较特殊,就是CAST。值得特别说明一下。CAST可以自动识别源数据类型,并将其转换为指定的目标类型,其中目标类型如下表所示


TINYINT SMALLINT INTEGER BIGINT  DECIMAL  SMALLDECIMAL  REAL

DOUBLE  ALPHANUM  VARCHAR NVARCHAR  DAYDATE  DATE TIME  SECONDDATE  TIMESTAMP

举例说明如下:

比如我们把700转成varchar类型再和另一个字符串拼接起来

  /wp-content/uploads/2014/03/1_400812.png

CAST还可以用于截断小数部分。

  /wp-content/uploads/2014/03/2_400813.png

  • (1) 到数值型转换

对于从字符串型到数值型的转换的不同函数,调用方式都差不多,为func(arg)的方式,其中func为函数名,arg为一个字符串。但TO_BIGINT,TO_INT等函数也可用数值调用,将截断小数部分。如

  /wp-content/uploads/2014/03/3_400838.png

其他函数可查阅文档,用法大同小异,就不一一解释了。

  • (2) 到日期型转换

提供了从字符串类型到日期类型的转换。一般需要提供字符串值及转换说明。如TO_DATE转换到日期类型

  /wp-content/uploads/2014/03/4_400840.png

其它函数可参考文档。

  • (3) 到二进制型转换

一般源类型为字符串,将其转换为二进制表示,也是字符串中字符的二进制表示。如

  /wp-content/uploads/2014/03/5_400841.png

对于TO_BLOB函数,有一点需要注意,参数类型必须是二进制字符串,也就是说将TO_BINARY(arg)的结果作为TO_BLOB的参数。

  • (4) 到字符串型转换

可以对字符串做一些处理。如TO_FIXEDCHAR(str, n)得到前n个字符组成的子串。

  /wp-content/uploads/2014/03/6_400842.png

2.日期函数

对于日期和时间类型,SAP HANA提供了丰富的函数以帮助简化代码,其中包括几类:(1) 日期加法;(2)获取当前日期和时间信息,支持多种不同格式; (3)日期抽取,从一个日期得到年、月、日、星期等信息; (4)计算两个日期的时间差,如秒数、天数、年数。

  • (1) 日期加法

可用于计算当前日期加上某个日期单位后得到的新日期,如天数、月数、年数。包括


ADD_DAYS

ADD_MONTHS

ADD_SECONDS

ADD_WORKDAYS

ADD_YEARS


   如

  /wp-content/uploads/2014/03/7_400843.png

  • (2) 当前日期和时间

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_UTCDATE

CURRENT_UTCTIME

CURRENT_UTCTIMESTAMP

  /wp-content/uploads/2014/03/8_400847.png

注意,调用的时候不需要左右括号。

  • (3) 时间信息抽取

DAYNAME

DAYOFMONTH

DAYOFYEAR

HOUR

MINUTE

EXTRACT

其中EXTRACT函数最通用,可以抽取年、月、日、小时、分、秒。

  /wp-content/uploads/2014/03/9_400848.png

  • (4) 计算两个日期的时间差

DAYS_BETWEEN

SECONDS_BETWEEN

WORKDAYS_BETWEEN

  /wp-content/uploads/2014/03/10_400849.png

注意日期比较的正负号,是以第二个参数的时间减去第一个参数的时间。


3.全文函数


全文函数包括


LANGUAGE

MIMETYPE

SCORE

下面一一介绍这几个函数。


         LANGUAGE主要用于探测数据表中某列的语言类型,前提条件是该列已经建好了全文索引。我们来看一个例子。建立一个可以检测到英语和德语的表



CREATE COLUMN TABLE T (CONTENT TEXT FAST PREPROCESS OFF LANGUAGE DETECTION('EN','DE'));
INSERT INTO T VALUES('This is a very short example.');
INSERT INTO T VALUES('Dies ist ein ganz kurzes Beispiel.');


然后我们选出英文的行。

  /wp-content/uploads/2014/03/11_400850.png

        MIMETYPE可用于检测MIME类型,前提条件和LANGUAGE一样,也是需要建立全文索引。作为示例,我们建立一个表包含普通文本和html文本行。



CREATE COLUMN TABLE TEMP (CONTENT TEXT FAST PREPROCESS OFF);
INSERT INTO TEMP VALUES('This is an example');
INSERT INTO TEMP VALUES('<html>This is an example</html>');


MIMETYPE检测各行的MIME类型。

  /wp-content/uploads/2014/03/12_400851.png

对于文本查找,SCORE函数可用于文本相似度计算。


CREATE COLUMN TABLE T (CONTENT TEXT FAST PREPROCESS OFF);
INSERT INTO T VALUES('This is a test.');
INSERT INTO T VALUES('This was a test.');

然后检测和is相似的文本。

  /wp-content/uploads/2014/03/13_400852.png

4.数值处理函数


数值处理函数可以接受的参数既可以是数值,还可以是字符串。如果提供的是字符串,执行中将进行隐式类型转换。数值处理函数有很多,如SINCOS等大家都很熟悉,可以查阅文档,这里只列出一些不太常见的函数。注意ASINSIN等三角函数以弧度为单位。

BINHEX将二进制值转换为十六进制数,如

  /wp-content/uploads/2014/03/14_400854.png

        对于需要做位运算的场合,SAP HANA也提供了方便的函数BITAND,BITSET,BITUNSET分别用于按位与、设置指定位、清空指定位。

        ROUND函数既可以进行截断也可以按指定小数位进行四舍五入。默认情况下,执行的是四舍五入,所以round(16.16, 1)到小数点后1位为16.2round(16.16, -1)到小数点后-1位就是到个位数。 

  /wp-content/uploads/2014/03/15_400855.png

/wp-content/uploads/2014/03/16_400856.png

Rounding mode指定了是向上入还是向下舍,所以下面两个例子中,ROUND_HALF_UP指定5向上入,ROUND_HALF_DOWN指定5向下舍弃。其它还有ROUND_HALF_EVENROUND_UPROUND_DOWNROUND_CEILINGROUND_FLOOR模式,具体请查阅文档。

  /wp-content/uploads/2014/03/17_400857.png

/wp-content/uploads/2014/03/18_400858.png


在这一篇日志里,我们介绍了SAP HANASQL函数里的数据类型转换、日期函数、全文函数、数值处理函数,下一篇日志里,我们将继续介绍SAP HANASQL函数:字符串处理函数、窗口函数、杂项函数。

想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply