返回首页

gbase数据、南大通用产品文档:GBase8aHOUR(time)

更新日期:2024年09月11日

函数说明
返回time 对应的小时值,对于小时值的返回值范围是从0 到23。
示例
示例1:返回“10:05:03”对应的小时值。
gbase> SELECT HOUR('10:05:03') FROM dual;
+------------------+
| HOUR('10:05:03') |
+------------------+
|
10 |
+------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
798
示例2:time 值范围实际上很大,因此HOUR 返回值可以比23 大。
gbase> SELECT HOUR('272:59:59') FROM dual;
+-------------------+
| HOUR('272:59:59') |
+-------------------+
|
272 |
+-------------------+
1 row in set

表的每一列包含一个属性,它就是一个特性、特征或描述表的主题的事实。stock 表具有有
关商品的下列事实的列:库存编号、制造商代码、描述、价格和计量单位。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 11 -

SELECT FORMAT_UNITS( SUM(chksize), 'P', 4), SIZE,
FORMAT_UNITS( SUM(nfree), 'p', 4) FREE FROM syschunks;
size 117.2 MB
free 8.049 MB
此查询返回字符串值 size 117.2 MB 和 free 8.047 MB。这些结果与前面仅以它
们的非缺省的精度进行查询的示例不同,由 FORMAT_UNITS 的最后一个参数指定
精度。
IFX_ALLOW_NEWLINE 函数
IFX_ALLOW_NEWLINE 函数设置换行模式,在当前的会话内在用引号括起来
的字符串中允许还是不允许换行字符。
IFX_ALLOW_NEWLINE 函数有下列语法。
IFX_ALLOW_NEWLINE 函数


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1500
如果您输入 't' 作为此函数的参数,则在该会话中启用用引号括起来的字符串
中的换行字符。如果您输入 'f' 作为参数,则在该会话中不允许用引号括起来
的字符串中的换行字符。
您可通过将 ONCONFIG 文件中的 ALLOW_NEWLINE 参数设置为值 0(不允
许换行字符)或值 1(允许换行字符)来为所有会话设置换行模式。如果您未设
置此配置参数,则缺省的值为 0。您每一次启动会话时,新的会话继承
ONCONFIG 文件中的换行模式设置。要更改会话的换行模式,请执行
IFX_ALLOW_NEWLINE 函数。一旦您已为会话设置了换行模式,该模式保持
有效,直到会话结束为止,或直到您在会话内在此执行
IFX_ALLOW_NEWLINE 函数为止。
在下列示例中,假设您未为 ONCONFIG 文件中的 ALLOW_NEWLINE 指定任何值,因
此,在缺省情况下,在任何会话中的用引号括起来的字符串中不允许换行字符。
在您启动新的会话之后,您可通过执行 IFX_ALLOW_NEWLINE 函数来启用那个会话
中的用引号括起来的字符串中的换行字符:
EXECUTE PROCEDURE IFX_ALLOW_NEWLINE('t');
在 ESQL/C 中,通过 ONCONFIG 文件中 的 ALLOW_NEWLINE 参数设置换行
模式,或通过在会话中执行 IFX_ALLOW_NEWLINE 函数设置换行模式,换行
模式仅适用于 SQL 语句中的用引号括起来的字符串文字。换行模式不适用于
SQL 语句中包含在主变量中的用引号括起来的字符串。主变量可在字符串数据内
包含换行字符,不理会当前生效的换行模式。
例如,您可使用主变量来将包含换行字符的数据插入到列内,即使 ONCONFIG
文件中的 ALLOW_NEWLINE 参数设置为 0。
要获取关于 IFX_ALLOW_NEWLINE 函数如何影响用引号括起来的字符串的更
多信息,请参阅 引用字符串。要获取关于 ONCONFIG 文件中的
ALLOW_NEWLINE 参数的更多信息,请参阅 GBase 8s 管理员参考手册。
加密和解密函数
GBase 8s 支持内置加密和解密函数。
加密和解密函数支持列级别加密,即对给定列中的所有值都用相同的password 进
行加密。并且加密和解密函数不支持对大对象数据进行加解密。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1501
ENCRPYPT_AES 函数
ENCRYPT_AES 函数使用 AES(高级加密标准)算法进行加密。
加密函数语法:

元素
描述
限制
语法
data
要进行加密的明文或列名。
不可省略。
表达式

password
加密函数设置的密码。缺省值是由
SET ENCRYPTION PASSWORD 语句定
义的会话密码值。
6 字节≤ password
≤128 字节。
表达式
hint
密码提示信息。缺省值是的是来自
定义 password 的 SET ENCRYPTION
PASSWORD 的 WITH HINT 子句的
值。
可以省略,0 字节≤
hint ≤32 字节。
表达式
当使用SET ENCRYPTION PASSWORD 语句设置密码时,加密函数的 password
参数可以省略,否则不可省略。
hint 的目的是帮助用户记忆password。
注意:如果列定义长度小于加密函数返回的数据大小,则插入此加密值时它就会
被截断。在此情况下,加密数据就无法再通过解密函数解密。
例如,下列语句创建名为 customer 的表,其中列 creditcard 可存储加密的信用
卡号码:
CREATE TABLE customer (id CHAR(20), creditcard CHAR(107));
指定密码(和可选的提示),使用 ENCRYPT_AES 函数进行加密:
SET ENCRYPTION PASSWORD 'abc123' WITH HINT 'zimushuzi';
INSERT INTO customer VALUES ('1001',
ENCRYPT_AES('1234567890123456'));
在此,SET ENCRYPTION PASSWORD 定义的session password 和 hint,用作
ENCRYPT_AES 函数缺省的第二和第三个参数。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1502
ENCRPYPT_TDES 函数
ENCRYPT_TDES 函数使用 TDES(三重数据加密标准)算法进行加密。其用法
与ENCRYPT_AES 函数相同。
DECRYPT_CHAR 函数
DECRYPT_CHAR 函数是解密函数,函数的返回值为加密前的原始数据。
DECRYPT_CHAR 函数

元素
描述
限制
语法
encrypted_data 加密函数的返回值,可以是加密后
字符串或列。
不可省略。
表达式

password
加密函数设置的密码。缺省值是由
SET ENCRYPTION PASSWORD 语句定
义的会话密码值。
6 字节≤
password ≤
128 字节。
表达式
解密需要加密密码 password,当已经使用 SET ENCRYPTION PASSWORD 语
句设置密码时,可以省略password 参数,否则不能省略此参数。
如果用于解密的password 与用于加密的password 不同,那么会产生错误。
例如,基于前面的示例,使用解密功能,查询加密了的数据:
SELECT id, DECRYPT_CHAR(creditcard,’abc123’) FROM customer;
返回结果如下:
id creditcard
----------------------------
1001 1234567890123456
GETHINT 函数
GETHINT 函数获取密码提示信息,返回值为加密函数设置的 hint 值或先前执
行SET ENCRYPTION PASSWORD 语句设置的 hint 值。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1503
GETHINT 函数

元素
描述
限制
语法
encrypted_data
要获取密码提示的数据,可以是
加密后的字符串或列。
不可省略。
表达式

例如,基于前面的示例,以下语句获取 customer 表的提示信息:
SELECT GETHINT(creditcard) FROM customer;
返回结果:
zimushuzi
MD5 函数
MD5 函数生成并返回符合 MD5 算法的数据特征值。
MD5 函数

元素
描述
限制
语法
expr
要获取特征值的数据。
不可省略。不能是大对
象、布尔类型、集合数据
类型。
表达式
expr 设置为 NULL 时,函数返回 NULL。
例如,假定 tab1 表不为空,执行以下语句:
SELECT MD5(‘abc’) FROM tab1;
汉字转拼音函数
GetHzFullPY 函数
GetHzFullPY 函数将汉字转换为全拼。
GetHzFullPY 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1504

元素
描述
限制
语法
expr
要转换为全拼的汉
字。
不能为 NULL,可以是字符
型、整数型数据。
表达


函数返回值为字符型。使用时,除汉字按顺序转换为全拼外,其余字符(包括数
字)都不进行转换,保留原值。转换完的拼音字符串缺省为小写。
例如,假定 tab1 表内容不为空,执行以下语句:
SELECT GETHZFULLPY(‘汉字123’) FROM tabl;
返回结果如下:
hanzi123
GetHzPYCAP 函数
GetHzPYCAP 函数将汉字转换为拼音首字母。
GetHzPYCAP 函数

元素
描述
限制
语法
expr
要转换成拼音首字母
的汉字。
不能为 NULL,可以是字符
型、整数型数据。
表达

函数返回值为字符型。使用时,除汉字按顺序转换为拼音首字母外,其余字符
(包括数字)都不进行转换,保留原值。转换完的拼音字符串缺省为小写。
例如,假定 tab1 表内容不为空,执行以下语句:
SELECT GETHZPYCAP(‘汉字’) FROM tabl;
返回结果如下:
hz

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1505
GetHzFullPYsubstr 函数
GetHzFullPYsubstr 函数将汉字转换为拼音后,提取指定个连续字符。
GetHzFullPYsubstr 函数

元素
描述
限制
语法
source_string
要转换为拼音的汉
字。
不能省略,必须是字符型
数据。
表达

start_position
源字符串转换为拼音
后,提取字符的偏移
量。
不能省略,不能为 0 或负
数。必须是数值型数据。
表达

length
返回的字符个数。
可以省略,不能为 0 或负
数。必须是数值型数据。
表达

GetHzFullPYsubstr 函数返回将 source_string 转换为拼音的字符串的子集。该
子集从 start_position 指定的位置开始向前计数。start_position 值从 1 开
始,值 1 表示字符串第一个字符位置。
length 参数指定提取字符的长度。如果您省略 length 参数,则
GetHzFullPYsubstr 函数返回从 start_position 处开始的拼音字符串。
例如,假定 tab1 表不为空,执行以下语句:
SELECT GETHZFULLPYSUBSTR(‘汉字’,1,2) FROM tabl;
返回结果如下:
ha
如果 length 为小数,则只取其整数部分。例如,执行以下语句:
SELECT GETHZFULLPYSUBSTR(‘汉字’,1,2.6) FROM tabl;
返回结果如下:
ha

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1506
SYS_GUID 函数
SYS_GUID 函数生成并返回一个全球唯一标识符,它由 16 个字节组成。在大多
数平台,生成的标识符由主机标识符、执行函数的进程或线程标识符、和进程或
线程的一个非重复的值(字节序列)。
SYS_GUID 函数

以下示例,用户使用 SYS_GUID() 函数获得一个全球唯一标识符。
SELECT sys_guid() FROM sysmaster:sysdual;
返回结果如下:
4A4F072262CC6D8AE050A8C0EB075197

列转行函数
WM_CONCAT 函数
WM_CONCAT 函数可以将结果集中指定列的数据合并成一行。WM_CONCAT 函数

元素
描述
限制
语法
expr
要合并为一行的
数据
可以是数值型、字符型和日
期型数据。
表达式
函数返回值为 LVARCHAR 数据类型。返回值的长度不能超过 16380 字节。转换
完指定列的多条记录合并到一行,多个记录使用逗号分隔。
如果返回值的长度超过 16380 字节,则会截断超长的字符,保存截断后的结果。
所以对于列转行函数返回值长度超过 16380 字节的情况,请使用
WM_CONCAT_TEXT() 函数以保存完整值。
例如,假定 tab1 表内容不为空:
SELECT col1 FROM tabl;
返回结果如下:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1507
col1
-----------
1001
1002
1003
1004
执行以下语句:
SELECT wm_concat (col1) col1 FROM tabl;
返回结果如下:
col1
------------------------
1001,1002,1003,1004
WM_CONCAT_TEXT 函数
WM_CONCAT_TEXT 函数可以将结果集中指定列的数据合并成一行。
WM_CONCAT_TEXT 函数

元素
描述
限制
语法
expr
要转为一行的数

可以是数值型、字符型和日
期型数据。
表达式
函数返回值为 TEXT 数据类型。转换完指定列的多条记录合并到一行,多个记录
使用逗号分隔。
当函数的返回值超过 16380 字节时,推荐使用该函数。
用户定义的函数
用户定义的函数(UDF)是一个例程,您以 SPL 或诸如 C 或 Java™ 这样的数
据库的外部语言编写该例程,且该例程将值返回到它的调用上下文。
作为表达式,UDF 有下列语法:
User-Defined Functions

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1508

元素
描述
限制
语法
function
函数的名称
函数必须存在
数据库对
象名
parameter
在 CREATE FUNCTION
语句中声明了的参数
的名称
对于被调用的函数中的任何
参数,如果您使用
parameter = 选项,则您必
须对所有参数使用它
标识符
您可在 SQL 语句内调用用户定义的函数。与内建的函数不一样,仅可由该函数
的创建者和 DBA 以及已被授予了对该函数的 Execute 权限的用户可调用用户定
义的函数。要获取更多信息,请参阅 例程级权限。
下列示例展示某些用户定义的函数表达式。在第一个示例罗列函数参数时,省略
它的 parameter 选项:
read_address('Miller')
第二个示例使用 parameter 选项来指定参数值:
read_address(lastname = 'Miller')
当您使用 parameter 选项时,parameter 名称必须与该函数注册中对应的参数的
名称相匹配。例如,前面的示例假设注册了 read_address( ) 函数如下:
CREATE FUNCTION read_address(lastname CHAR(20))
RETURNING address_t ... ;
语句本地的变量(SLV)使得应用能够将值从用户定义的函数调用传递到同一
SQL 语句的另一部分。
随同用户定义的函数调用来使用 SLV
1.
为用户定义的函数写一个或多个 OUT 参数(对于以 Java 或以 SPL 语
言编写的 UDR,为 INOUT 参数)。
要获取关于如何以 OUT 或 INOUT 参数编写 UDR 的信息,请参阅
GBase 8s 用户定义的例程和数据类型开发者指南 。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1509
2.
当您注册用户定义的函数时,请在每一 OUT 参数之前指定 OUT 关键
字,并在每一 INOUT 参数之前指定 INOUT 关键字。
要获取更多信息,请参阅 为用户定义的例程指定 INOUT 参数 和 为用
户定义例程指定 OUT 参数。
3.
请在以每一 OUT 和 INOUT 参数调用用户定义的函数的函数表达式中声
明 SLV。
必须在 WHERE 内进行用户定义的函数的调用。要获取关于声明 SLV
的语法的信息,请参阅 语句本地的变量声明。
4.
请在 SQL 语句内使用该用户定义的函数已初始化了的 SLV。
在用户定义的函数的调用已初始化了 SLV 之后,您可在其中声明了 SLV
的同一 SQL 语句的其他部分中使用此值,包括其 WHERE 子句包括该
SLV 声明的查询的子查询。要获取关于在 SELECT 语句内使用 SLV 的
信息,请参阅 语句本地的变量表达式。
除了使用 SLV 来从 OUT 或 INOUT 参数检索值之外,您还可使用本地变量或
SPL 例程的参数来从有 OUT 或 INOUT 参数的 SPL 或 C 例程检索值。
语句本地的变量声明
“语句本地的变量声明”在对定义一个或多个 OUT 或 INOUT 参数的用户定义的
函数的调用中声明语句本地的变量(SLV)。
“语句本地的变量声明”有此语法:
语句本地的变量声明

元素
描述
限制
语法
distinct_data_type
distinct 数据类型
的名称
distinct 数据类型必须
在数据库中已经存在
标识


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1510
元素
描述
限制
语法
opaque_data_type
opaque 数据类型的
名称
opaque 数据类型必须在
数据库中已经存在
标识

slv_name
您正在定义的语句
本地的变量的名称
slv_name 仅在该语句的
生命期内有效,且 在该
语句内必须是唯一的
标识

如果下列两个条件都为真,则您可在一个用户定义的函数的调用中声明 SLV:

UDF 有一个或多个 OUT 或 INOUT 参数

当在查询的 WHERE 子句中调用 UDF 时,声明 SLV。
WHERE 子句中的 SLV 声明将 OUT 或 INOUT 参数的值指定到 SLV,使用
SLV 的标识符与它的声明的数据类型之间的井号(#)。可以 SPL、C 或 Java™
语言编写 UDF。例如,如果您以下列 CREATE FUNCTION 语句注册函数,则可
将它的 y 参数(其为 OUT 参数)的值指定到 WHERE 子句中的 SLV:
CREATE FUNCTION find_location(a FLOAT, b FLOAT, OUT y INTEGER)
RETURNING VARCHAR(20)
EXTERNAL NAME "/usr/lib/local/find.so"
LANGUAGE C;
在此示例中,find_location( ) 接受两个表示纬度和经度的 FLOAT 值,并返回带
有额外的表示最近城市的人口等级的 INTEGER 类型的值的城市名称。
现在,您可在 WHERE 子句中调用 find_location( ):
SELECT zip_code_t FROM address
WHERE address.city = find_location(32.1, 35.7, rank # INT)
AND rank < 101;
该函数表达式将两个 FLOAT 值传递到 find_location( ) 并声明名为 rank 的
INT 类型的 SLV。在此情况下,find_location( ) 将返回距离纬度 32.1 和经度