金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(一))

8. 函数

函数类似于运算符,因为它们操作数据项并返回结果。函数在参数格式上与运算符不同。这种格式使它们能够对零个、一个、两个或多个参数进行操作:

函数(参数,参数,...) 没有任何参数的函数类似于伪列。但是,伪列通常为结果集中的每一行返回不同的值,而没有任何参数的函数通常为每一行返回相同的值。 本章包含以下部分:

8.1. 关于SQL函数

SQL 函数内置于 KingBase 数据库中,可用于各种适当的 SQL 语句。不要将 SQL 函数与用 PL/SQL 编写的用户定义函数混淆。

如果调用 SQL 函数的参数的数据类型与 SQL 函数预期的数据类型不同,那么 KingBase 会在执行 SQL 函数之前尝试将参数转换为预期的数据类型。

  • SQL 函数中的空值

    大多数标量函数在给定 null 参数时返回 null。您可以使用该NVL函数在发生 null 时返回一个值。例如,如果为空,则表达式NVL(commission_pct,0)返回 0,如果commission_pct不为空,则返回 的值commission_pct。

    有关聚合函数如何处理空值的信息,请参阅聚合函数。

  • SQL 函数的语法

    在 SQL 函数的语法图中,参数由它们的数据类型表示。当参数function出现在 SQL 语法中时,将其替换为本节中描述的函数之一。函数按其参数和返回值的数据类型分组。

    将 SQL 函数应用于 LOB 列时,KingBase 数据库会在 SQL 和 PL/SQL 处理期间创建临时 LOB。您应该确保临时表空间配额足以为您的应用程序存储这些临时 LOB。

    SQL 函数可能对排序规则敏感,这意味着它执行的字符值比较或匹配由排序规则控制。函数使用的特定排序规则由函数参数的排序规则确定。

    如果 SQL 函数的结果具有字符数据类型,则排序规则派生规则定义排序规则以与结果关联。

以下内容对Kingbases数据库中的函数按照其用途进行分类,然后对每个函数的用法、功能、使用示例进行说明。

8.2. 数学函数

下表显示KingbaseES了可用的数学函数。在该表中,dp表示double precision。这些函数中有许多都有多种不同的形式,区别是参数不同。除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。 处理double precision数据的函数大多数是在宿主系统的 C 库基础上实现的;因此,边界情况下的准确度和行为是根据宿主系统而变化的。

ABS

BITAND

CBRT

CEIL

CEILING

DEGREES

DIV

EXP

FLOOR

LN

LOG

LOG10

MOD

PI

POWER

RADIANS

ROUND

SCALE

SIGN

SQRT

TRUNC

用于产生随机数的函数。

RANDOM

SETSEED

下表显示了可用的三角函数。 所有三角函数都有类型为double precision的参数和返回类型。每一种三角函数都有两个变体,一个以弧度度量角,另一个以角度度量角。

ACOS

ASIN

ATAN

ATAN2

COS

COT

SIN

TAN

下表显示可用的双曲函数。 所有这些函数的参数和返回值的类型都是double precision

SINH

COSH

TANH

ASINH

ACOSH

ATANH

8.3. 字符串函数

本节描述了用于检查和操作字符串值的函数。在这个环境中的串包括所有类型charactercharacter varyingtext的值。除非另外说明,所有下面列出的函数都可以处理这些类型,不过要小心的是,在使用character类型的时候,它有自动填充空白的潜在影响。有些函数还可以处理位串类型。

SQL定义了一些字符串函数,它们使用关键字,而不是逗号来分隔参数。详情请见下表,KingbaseES也提供了这些函数使用正常函数调用语法的版本。

注意

由于存在从那些数据类型到text的隐式强制措施,在KingbaseES V8.3 之前,这些函数也可以接受多种非字符串数据类型。这些强制措施在目前的版本中已经被删除,因为它们常常导致令人惊讶的行为。不过,字符串串接操作符(||)仍然接受非字符串输入,只要至少一个输入是一种字符串类型,如下表所示。对于其他情况,如果你需要复制之前的行为,可以为text插入一个显式强制措施。对于||操作符,支持两个字符之间输入若干空格或者换行的字符,效果和不加空格或换行一致。

BIT_LENGTH

BTRIM

CHAR_LENGTH

CHARACTER_LENGTH

CHARINDEX

CHR

CONCAT

CONCAT_WS

CONTAINS

CONVERT

CONVERT_FROM

CONVERT_TO

DECODING

ENCODE

FORMAT

FORMAT

INITCAP

INSTR

INSTRB

LOWER

OCTET_LENGTH

OVERLAY

POSITION

SUBSTRING

TRIM

UPPER

8.4. 二进制串函数

本节描述那些检查和操作类型为bytea的值的函数。

SQL定义了一些使用关键字而不是逗号来分割参数的串函数。详情请见下表。KingbaseES也提供了这些函数使用常规函数调用语法的版本。

注意

本页中显示的示例结果假设服务器参数 bytea_output 被设置为escape(传统KingbaseES格式)。

BLOB_EXPORT

BLOB_IMPORT

BTRIM

DECODING

EMPTY_BLOB

ENCODE

GET_BIT

GET_BYTE

LENGTH

MD5

OCTET_LENGTH

OVERLAY

POSITION

SHA224

SHA256

SHA384

SHA512

SUBSTRING

TRIM

8.5. 模式匹配函数

本节描述了KingbaseES 支持 POSIX正则表达式模式匹配的函数。

REGEXP_REPLACE

REGEXP_MATCH

REGEXP_SPLIT_TO_TABLE

REGEXP_SPLIT_TO_ARRAY

8.6. 数据类型格式化函数

KingbaseES格式化函数提供一套强大的工具用于把各种数据类型(日期/时间、整数、浮点、数字)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型。下表列出了这些函数。这些函数都遵循一个公共的调用规范:第一个参数是待格式化的值,而第二个是一个定义输出或输入格式的模板。

TO_CHAR

TO_DATE

TO_NUMBER

TO_TIMESTAMP

TO_TIMESTAMP_TZ

8.7. 时间日期函数

下表展示了可用于处理日期/时间值的函数,其细节在随后的小节中描述。并演示了基本算术操作符 (+*等)的行为。 而与格式化相关的函数,可以参考 数据类型格式化函数 。你应该很熟悉 日期时间类型 中的日期/时间数据类型的背景知识。

所有下文描述的接受timetimestamp输入的函数和操作符实际上都有两种变体: 一种接收time with time zonetimestamp with time zone, 另外一种接受time without time zone或者 timestamp without time zone。为了简化,这些变种没有被独立地展示。此外,+*操作符都是可交换的操作符对(例如,date + integer 和 integer + date);我们只显示其中一个。

AGE

CLOCK_TIMESTAMP

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

DATE_PART

DATE_TRUNC

DAYS_BETWEEN

EXTRACT

ISFINITE

JUSTIFY_DAYS

JUSTIFY_HOURS

JUSTIFY_INTERVAL

LOCALTIME

LOCALTIMESTAMP

MAKE_DATE

MAKE_INTERVAL

MAKE_TIME

MAKE_TIMESTAMP

MAKE_TIMESTAMPTZ

MONTH

MONTHS_BETWEEN

NOW

ROUND

SESSIONTIMEZONE

STATEMENT_TIMESTAMP

STR_VALID

SYSDATE

SYS_SLEEP

SYS_SLEEP_FOR

SYS_SLEEP_UNTIL

TIMEOFDAY

TIMESUB

TO_TIMESTAMP

YEAR

8.8. 枚举支持函数

对于枚举类型有一些函数允许更清洁的编码,而不需要为一个枚举类型硬写特定的值。它们被列在下表 中。

enum_first

enum_last

enum_range

8.9. 几何函数

几何类型pointbox、 lseglinepath、 polygoncircle有一大堆本地支持函数,如下列表所示。

BOUND_BOX

BOX

CENTER

CIRCLE

DIAMETER

HEIGHT

ISOPEN

LENGTH

LSEG

RADIUS

8.10. 网络地址函数

下表展示了所有可以用于cidrinet类型的函数。函数abbrevhost主要是为了提供可选的显示格式用的。

ABBREV

FAMILY

HOST

HOSTMASK

INET_MERGE

INET_SAME_FAMILY

8.11. XML函数

本节中描述的函数以及类函数的表达式都在类型xml的值上操作。

用于在值和 类型xml之间转换的类函数的表达式xmlparse和 xmlserialize不在这里重复介绍。

APPENDCHILDXML

CURSOR_TO_XML

DELETEXML

EXISTSNODE

EXTRACT

EXTRACTVALUE

INSERTCHILDXML

INSERTCHILDXMLAFTER

INSERTCHILDXMLBEFORE

INSERTXMLAFTER

INSERTXMLBEFORE

QUERY_TO_XML

TABLE_TO_XML

UPDATEXML

XMLCOMMENT

XMLCONCAT

XMLELEMENT

XMLEXISTS

XMLFOREST

XMLPI

XMLROOT

XMLTABLE

XML_IS_WELL_FORMED

XML_IS_WELL_FORMED_CONTENT

XML_IS_WELL_FORMED_DOCUMENT

XPATH

XPATH_EXISTS

8.12. JSON函数

本节描述用于处理和创建JSON数据的函数。

ARRAY_TO_JSON

JSONB_ARRAY_ELEMENTS

JSONB_ARRAY_ELEMENTS_TEXT

JSONB_ARRAY_LENGTH

JSONB_BUILD_ARRAY

JSONB_BUILD_OBJECT

JSONB_EACH

JSONB_EACH_TEXT

JSONB_EXTRACT_PATH

JSONB_EXTRACT_PATH_TEXT

JSONB_INSERT

JSONB_OBJECT

JSONB_OBJECT_KEYS

JSONB_PATH_EXISTS

JSONB_PATH_MATCH

JSONB_PATH_QUERY

JSONB_PATH_QUERY_ARRAY

JSONB_PATH_QUERY_FIRST

JSONB_POPULATE_RECORD

JSONB_POPULATE_RECORDSET

JSONB_PRETTY

JSONB_SET

JSONB_STRIP_NULLS

JSONB_TO_RECORD

JSONB_TO_RECORDSET

JSONB_TYPEOF

JSON_ARRAY_ELEMENTS

JSON_ARRAY_ELEMENTS_TEXT

JSON_ARRAY_LENGTH

JSON_BUILD_ARRAY

JSON_BUILD_OBJECT

JSON_EACH

JSON_EACH_TEXT

JSON_EXTRACT_PATH

JSON_EXTRACT_PATH_TEXT

JSON_OBJECT

JSON_OBJECT_KEYS

JSON_POPULATE_RECORD

JSON_STRIP_NULLS

JSON_TO_RECORD

JSON_TO_RECORDSET

JSON_TYPEOF

ROW_TO_JSON

TO_JSON

TO_JSONB

8.13. 序列操作函数

本节描述用于操作 序列对象 的函数,序列对象也被称为序列生成器或者就是序列。序列对象通常用于为表的行生成唯一的标识符。下表中列出的这些序列函数,可以为我们从序列对象中获取连续的序列值提供了简单的、多用户安全的方法。

CURRVAL

LASTVAL

NEXTVAL

SETVAL

8.14. 数组函数

下表展示了可以用于数组类型的函数。

ARRAY_APPEND

ARRAY_CAT

ARRAY_DIMS

ARRAY_FILL

ARRAY_LENGTH

ARRAY_LOWER

ARRAY_NDIMS

ARRAY_POSITION

ARRAY_POSITIONS

ARRAY_PREPEND

ARRAY_REMOVE

ARRAY_REPLACE

ARRAY_TO_STRING

ARRAY_UPPER

CARDINALITY

STRING_TO_ARRAY

UNNEST

8.15. 范围函数

下表显示可用于范围类型的函数

ISEMPTY

LOWER

LOWER_INC

LOWER_INF

RANGE_MERGE

UPPER

8.16. 聚集函数

聚集函数 从一个输入值的集合计算出一个单一值。在SELECT语句中支持聚集函数嵌套调用,SELECT列表中仅支持一层聚集函数嵌套,查询语句中必须包含GROUP BY子句。

ARRAY_AGG

AVG

BIT_AND

BIT_OR

BOOL_AND

BOOL_OR

CORR

COUNT

COVAR_POP

COVAR_SAMP

EVERY

JSON_AGG

JSON_OBJECT_AGG

JSONB_AGG

JSONB_OBJECT_AGG

LISTAGG

MAX

MIN

STDDEV

STDDEV_POP

STDDEV_SAMP

STRING_AGG

SUM

VAR_POP

VAR_SAMP

VARIANCE

WM_CONCAT

XMLAGG

8.17. 窗口函数

窗口函数提供在与当前查询行相关的行集合上执行计算的能力。

下表列出了内建的窗口函数。注意必须使用窗口函数的语法调用这些函数; 一个OVER子句是必需的。

在这些函数之外,任何内建的或者用户定义的通用或者统计性聚集(即非有序集和假想集聚集)都可以被用作一个窗口函数,内建聚集的列表请见 聚集函数 。仅当聚集函数调用后面跟着一个OVER子句时,聚集函数才会像窗口函数那样工作,否则它们会按非窗口聚集的方式运行并且为整个集合返回一个单一行。

CUME_DIST

DENSE_RANK

FIRST_VALUE

LAG

LAST_VALUE

LEAD

NTH_VALUE

NTILE

PERCENT_RANK

RANK

RATIO_TO_REPORT

ROW_NUMBER

8.18. 集合返回函数

本节描述那些可能返回多于一行的函数。目前这个类中被使用最广泛的是级数生成函数。其他更特殊的集合返回函数在本手册的其他地方描述。

GENERATE_SERIES

GENERATE_SUBSCRIPTS

8.19. 系统信息函数

下表展示了多个可以抽取会话和系统信息的函数。

除了本节列出的函数,还有一些与统计系统相关的函数也提供系统信息。

COL_DESCRIPTION

CONNECTIONS

CONVERT

CURRENT_DATABASE

CURRENT_QUERY

CURRENT_SCHEMA

CURRENT_SCHEMAS

FORMAT_TYPE

GETUSERNAME

HAS_ANY_COLUMN_PRIVILEGE

HAS_COLUMN_PRIVILEGE

HAS_DATABASE_PRIVILEGE

HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE

HAS_FUNCTION_PRIVILEGE

HAS_LANGUAGE_PRIVILEGE

HAS_SCHEMA_PRIVILEGE

HAS_SEQUENCE_PRIVILEGE

HAS_SERVER_PRIVILEGE

HAS_TABLE_PRIVILEGE

HAS_TABLESPACE_PRIVILEGE

HAS_TYPE_PRIVILEGE

INET_CLIENT_ADDR

INET_CLIENT_PORT

INET_SERVER_ADDR

INET_SERVER_PORT

SESSION_ID

SESSION_USER

SYS_BACKEND_PID

SYS_FUNCTION_IS_VISIBLE

SYS_GET_CONSTRAINTDEF

SYS_GET_EXPR

SYS_GET_FUNCTION_ARGUMENTS

SYS_GET_FUNCTION_IDENTITY_ARGUMENTS

SYS_GET_FUNCTION_RESULT

SYS_GET_FUNCTIONDEF

SYS_GET_INDEXDEF

SYS_GET_KEYWORDS

SYS_GET_OBJECT_ADDRESS

SYS_GET_RULEDEF

SYS_GET_SERIAL_SEQUENCE

SYS_GET_STATISTICSOBJDEF

SYS_GET_TRIGGERDEF

SYS_GET_USERBYID

SYS_GET_VIEWDEF

SYS_HAS_ROLE

SYS_IDENTIFY_OBJECT

SYS_IDENTIFY_OBJECT_AS_ADDRESS

SYS_KINGBASE_START_TIME

SYS_TABLE_IS_VISIBLE

SYS_TABLESPACE_DATABASES

SYS_TABLESPACE_LOCATION

TRANSACTION_TIMESTAMP

USER

VERSION

8.20. 系统管理函数

这一节描述的函数被用来控制和监视一个KingbaseES安装。包括配置设定函数、服务器信号函数、备份控制函数、恢复控制函数、数据库对象管理函数、索引维护函数、通用文件访问函数等。参见下表:

CURRENT_SETTING

GET_DISK_INFO

SYS_CANCEL_BACKEND

SYS_COLUMN_SIZE

SYS_DATABASE_SIZE

SYS_INDEXES_SIZE

SYS_LS_DIR

SYS_LS_LOGDIR

SYS_LS_TMPDIR

SYS_LS_WALDIR

SYS_READ_BINARY_FILE

SYS_READ_FILE

SYS_RELATION_FILENODE

SYS_RELATION_FILEPATH

SYS_RELATION_SIZE

SYS_RELOAD_CONF

SYS_SIZE_BYTES

SYS_SIZE_PRETTY

SYS_STAT_FILE

SYS_TABLE_SIZE

SYS_TABLESPACE_SIZE

SYS_TERMINATE_BACKEND

SYS_TOTAL_RELATION_SIZE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值