Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

        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类型再和另一个字符串拼接起来

 

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

 

  • (1) 到数值型转换

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

 

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

  • (2) 到日期型转换

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

 

其它函数可参考文档。

  • (3) 到二进制型转换

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

 

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

  • (4) 到字符串型转换

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

 

2.日期函数

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

  • (1) 日期加法

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


ADD_DAYS

ADD_MONTHS

ADD_SECONDS

ADD_WORKDAYS

ADD_YEARS


   如

 

  • (2) 当前日期和时间

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_UTCDATE

CURRENT_UTCTIME

CURRENT_UTCTIMESTAMP

 

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

  • (3) 时间信息抽取

DAYNAME

DAYOFMONTH

DAYOFYEAR

HOUR

MINUTE

EXTRACT

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

 

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

DAYS_BETWEEN

SECONDS_BETWEEN

WORKDAYS_BETWEEN

 

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


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.');


然后我们选出英文的行。

 

        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类型。

 

对于文本查找,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相似的文本。

 

4.数值处理函数


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

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

 

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

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

 

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

 


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

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

Labels in this area