SAP HANA SQL 函数简介及使用(1)
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主要用于探测数据表中某列的语言类型,前提条件是该列已经建好了全文索引。我们来看一个例子。建立一个可以检测到英语和德语的表
|
然后我们选出英文的行。
MIMETYPE可用于检测MIME类型,前提条件和LANGUAGE一样,也是需要建立全文索引。作为示例,我们建立一个表包含普通文本和html文本行。
|
用MIMETYPE检测各行的MIME类型。
对于文本查找,SCORE函数可用于文本相似度计算。
|
然后检测和is相似的文本。
4.数值处理函数
数值处理函数可以接受的参数既可以是数值,还可以是字符串。如果提供的是字符串,执行中将进行隐式类型转换。数值处理函数有很多,如SIN、COS等大家都很熟悉,可以查阅文档,这里只列出一些不太常见的函数。注意ASIN、SIN等三角函数以弧度为单位。
BINHEX将二进制值转换为十六进制数,如
对于需要做位运算的场合,SAP HANA也提供了方便的函数BITAND,BITSET,BITUNSET分别用于按位与、设置指定位、清空指定位。
ROUND函数既可以进行截断也可以按指定小数位进行四舍五入。默认情况下,执行的是四舍五入,所以round(16.16, 1)到小数点后1位为16.2。round(16.16, -1)到小数点后-1位就是到个位数。
Rounding mode指定了是向上入还是向下舍,所以下面两个例子中,ROUND_HALF_UP指定5向上入,ROUND_HALF_DOWN指定5向下舍弃。其它还有ROUND_HALF_EVEN、ROUND_UP、ROUND_DOWN、ROUND_CEILING、ROUND_FLOOR模式,具体请查阅文档。
在这一篇日志里,我们介绍了SAP HANA的SQL函数里的数据类型转换、日期函数、全文函数、数值处理函数,下一篇日志里,我们将继续介绍SAP HANA的SQL函数:字符串处理函数、窗口函数、杂项函数。
想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!