云数据库 GAUSSDB-系统函数:单行函数

时间:2024-01-05 17:36:07

单行函数

序号

Oracle数据库

GaussDB数据库

1

数值函数

支持

2

返回字符值的字符函数

支持

3

返回数值的字符函数

支持

4

字符集函数

支持

5

Collation函数

不支持

6

日期时间函数

支持

7

一般比较函数

支持

8

转换函数

支持

9

大对象函数

支持

10

集合函数

不支持

11

分层函数

支持

12

数据挖掘功能函数

不支持

13

XML函数

支持,有差异

14

JSON函数

支持

15

编码和解码功能函数

支持

16

NULL相关函数

支持

17

环境和标识符函数

支持

18

聚合函数

支持

19

分析函数

不支持

20

对象引用函数

不支持

21

模型函数

不支持

22

OLAP函数

不支持

23

数据盒功能函数

不支持

24

关于用户定义的函数

支持

表1 数字函数

序号

Oracle数据库函数

GaussDB 数据库是否支持

差异

1

ABS

支持。

-

2

ACOS

支持。

-

3

ASIN

支持。

-

4

ATAN

支持。

-

5

ATAN2

支持。

-

6

BITAND

支持。

-

7

CEIL

支持。

-

8

COS

支持。

-

9

COSH

支持。

-

10

EXP

支持。

-

11

FLOOR

支持。

-

12

LN

支持。

-

13

LOG

支持。

-

14

MOD

支持,有差异。

  • 返回类型不一致,Oracle数据库类型包括BINARY_DOUBLE,BINARY_FLOAT,NUMBER;GaussDB返回类型包括int2,int4,int8,numeric。
  • 当两个入参中有一个是int类型时,另一个参数必须为int、numeric类型或字面值整数(无小数点的合法数字如:‘12’)。

15

NANVL

支持,有差异。

不支持直接声明或浮点数除0得到NaN

16

POWER

支持。

-

17

REMAINDER

支持,有差异。

当两个入参中有一个是int类型时,另一个参数必须为int、numeric类型或字面值整数(无小数点的合法数字如:‘12’)

18

ROUND

支持,有差异。

  • 第一个参数n的float类型GaussDB存在精度损失,比Oracle数据库精度低。
  • 返回类型不一致。round(n, integer)形式,Oracle数据库NUMBER类型,GaussDB返回numeric类型;round(n)形式,Oracle数据库n的数据类型,GaussDB只能返回float8和numeric类型,缺少float4返回类型。
  • GaussDB判断入参有null,执行框架返回null的逻辑与Oracle数据库不一致
    select round(NULL,'q');

    Oracle数据库null,GaussDB报错invalid input syntax for integer: "q"。

19

SIGN

支持。

-

20

SIN

支持。

-

21

SINH

支持。

-

22

SQRT

支持。

-

23

TAN

支持。

-

24

TANH

支持,有差异。

返回值精度有差异。

25

TRUNC

支持。

-

26

W IDT H_BUCKET

支持。

-

表2 字符串函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

CHR

支持,有差异

  • 输入的数字不符合现有字符集时,在JDBC下GaussDB会报错,Oracle数据库会返回乱码。
  • 输入0、256等时Oracle数据库会返回Ascii码为0的字符,GaussDB会在'\0;处截断。

2

CONCAT

支持

-

3

INITCAP

支持

-

4

LOWER

支持,有差异

  • 返回值类型不一致,Oracle数据库和输入类型一致的数据类型。
  • 对时间格式上隐式转换问题,输入时间类型时,隐式转换为字符串再进行lower操作。
    SELECT LOWER(TO_DATE('2012-12-10','YYYY-MM-DD')); 

    Oracle返回10-DEC-12,GaussDB返回2012-12-10 00:00:00。

5

LPAD

支持

-

6

LTRIM

支持,有差异

返回值类型不一致,输入是字符数据类型时Oracle返回VARCHAR2类型,输入是数据库创建指定的国家字符集时Oracle返回NVARCHAR2类型,输入是LOB类型时Oracle返回LOB类型,GaussDB返回TEXT类型。

7

NLS_LOWER

支持,有差异

  • 返回值类型不同,输入是字符数据类型时Oracle返回VARCHAR2类型,输入是LOB类型时Oracle返回LOB类型,GaussDB返回TEXT类型。
  • nlsparam参数Oracle数据库还可以传入除nls_sort外的其他参数种类而不报错,GaussDB只支持nls_sort。

8

NLS_UPPER

支持,有差异

  • 返回值类型不同,输入是字符数据类型时Oracle返回VARCHAR2类型,输入是LOB类型时Oracle返回LOB类型,GaussDB返回TEXT类型。
  • nlsparam参数Oracle数据库还可以传入除nls_sort外的其他参数种类而不报错,GaussDB只支持nls_sort。

9

NLSSORT

支持

-

10

REGEXP_REPLACE

支持,有差异

-

11

REGEXP_SUBSTR

支持

-

12

REPLACE

支持

-

13

RPAD

支持

-

14

RTRIM

支持

-

15

SUBSTR

支持

-

16

TRANSLATE

支持

-

17

TRIM

支持

-

18

UPPER

支持,有差异

  • 返回值类型不一致,Oracle数据库和输入类型一致的数据类型,GaussDB返回TEXT类型。
  • 对时间格式上隐式转换问题,输入时间类型时,隐式转换为字符串再进行upper操作。
    SELECT UPPER(TO_DATE('2012-12-10','YYYY-MM-DD')); 

    Oracle返回10-DEC-12,GaussDB返回2012-12-10 00:00:00。

19

ASCII

支持,有差异

返回值类型不同,Oracle数据库返回类型为uint4,GaussDB为int4。

20

INSTR

支持

-

21

INSTRB

支持

-

22

LENGTH

支持

-

23

REGEXP_COUNT

支持,有差异

24

REGEXP_INSTR

支持

-

25

EMPTY_CLOB

支持,有差异

clob不支持定位器

26

NCHR

支持,有差异

  • 返回值字节长度与Oracle数据库不一致。
  • 返回值受限于数据库字符集,导致返回结果与Oracle数据库不一致。
  • 返回入参对应的字节数组时,单个字节在[0x80-0xFF]范围,会返回“?”,Oracle数据库返回“?”或者不输出、或者会报错。
表3 日期时间函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

ADD_MONTHS

支持,有差异

  • 公元后到公元前,GaussDB会和Oracle数据库相差1年。
  • GaussDB的计算结果范围可以到-4714年,Oracle数据库只到-4713年。

2

CURRENT_DATE

支持,有差异

不支持nls_date_format参数设置时间显示格式。

3

CURRENT_TIMESTAMP

支持,有差异

Oracle数据库参数支持范围(0-9),GaussDB支持范围(0-6),微秒末位零不显示。

4

DBTIMEZONE

支持,有差异

不支持自带tz的timestamp类型接口的调用。

5

EXTRACT

支持

-

6

LAST_DAY

支持,有差异

返回值类型不一致,GaussDB返回值类型为timestamp without time zone,Oracle返回值类型为date。

7

LOCALTIMESTAMP

支持

-

8

MONTHS_BETWEEN

支持,有差异

入参类型不一致,GaussDB入参均为timestamp without time zone类型,Oracle入参均为date类型。

9

NEW_TIME

支持,有差异

new_time函数的第一个入参为字面量时,字面量的格式以及函数的返回值类型均与Oracle数据库不一致。

10

NEXT_DAY

支持

-

11

NUMTODSINTERVAL

支持,有差异

不支持dsinterval类型,暂时用interval兼容dsinterval类型。

12

NUMTOYMINTERVAL

支持,有差异

不支持yminterval类型,暂时用interval兼容yminterval类型。

13

SESSIONTIMEZONE

支持,有差异

-

14

SYS_EXTRACT_UTC

支持

-

15

SYSDATE

支持,有差异

返回值类型不一致,GaussDB返回值类型为timestamp without time zone,Oracle返回值类型为date。

16

TO_CHAR

支持,有差异

fmt‘5’未在Oracle数据库文档中,未适配。

17

TO_DSINTERVAL

支持,有差异

不支持dsinterval类型,暂时用interval兼容dsinterval类型。

18

TO_TIMESTAMP

支持,有差异

GaussDB毫秒计算只支持6位,Oracle数据库支持9位。

19

TO_TIMESTAMP_TZ

支持,有差异

GaussDB的timestamptz等价于Oracle的timestampwithloacltimezone,缺少Oracle对应的timestamptz类型。nls_date_language只支持ENGLISH和AMERICAN两种语言。

20

TO_YMINTERVAL

支持,有差异

不支持yminterval类型,暂时用interval兼容yminterval类型。

21

TZ_OFFSET

支持,有差异

接受一个时区名称为入参的时候,时区名称的类型比Oracle数据库要少。

表4 通用比较函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

GREATEST

支持,有差异

接受一个时区名称为入参的时候,时区名称的类型比Oracle数据库要少。

2

LEAST

支持,有差异

  • 不支持NLS_SORT参数制定的比较方式,只支持二进制比较。
  • 不支持多语种的表达式。
表5 转换函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

ASCIISTR

支持,有差异

GaussDB数值类型返回结果与Oracle数据库不一致。

2

CAST

支持,有差异

  • 不支持multiset子句。
  • 不支持nlsparam参数。

3

CONVERT

支持

-

4

HEXTORAW

支持

-

5

RAWTOHEX

支持

-

6

TO_BINARY_DOUBLE

支持,有差异

不支持nlsparam参数

7

TO_BINARY_FLOAT

支持,有差异

不支持nlsparam参数

8

TO_BLOB

支持,有差异

  • 不支持long raw类型。
  • 不支持bfile、mime_type类型。

9

TO_CLOB

支持

-

10

TO_DATE

支持,有差异

  • 不支持多语种参数。
  • 返回类型不一致。
  • 缺少控制参数NLS_DATE_FORMAT。
  • 部分format格式不支持。
  • fmt = 'j'。 1582年10月15日之前Oracle数据库与GaussDB输出不一致。
  • 无分割符时,不保证与Oracle数据库完全一致。如to_date(‘220725’, ‘yymmdd’),yy/rr按照固定长度4解析,会解析为2207年25月,25非法月份则会报错。

11

TO_MULTI_BYTE

支持

-

12

TO_NCHAR

支持,有差异

将入参的类型直接转换为text。

13

TO_NUMBER

支持,有差异

不支持nlsparam参数。

14

TO_SINGLE_BYTE

支持

-

15

TREAT

支持,有差异

不支持使用“.”操作符取值,不支持转化为object类型。

16

UNISTR

支持,有差异

GaussDB只支持UTF-8编码,Oracle数据库支持UTF-8和UTF-16编码。

表6 二进制函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

EMPTY_BLOB

支持

-

表7 层次函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

SYS_CONNECT_BY_PATH

支持,有差异

第一个入参指定的列的类型仅支持CHAR/VARCHAR/NVARCHAR2/TEXT类型

表8 XML类型函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

EXISTSNODE

支持,有差异

在入参有命名空间时,xpath和命名空间都需要定义别名。

2

EXTRACTVALUE

不支持

-

3

SYS_XMLAGG

支持,有差异

xmlagg的别名,可使用xmlagg代替。

4

XMLAGG

支持

-

5

XMLCOMMENT

支持

-

6

XMLCONCAT

支持

-

7

XMLELEMENT

支持,有差异

-

8

XMLEXISTS

支持,有差异

入参为xml类型,部分语法不同。

9

XMLFOREST

支持,有差异

返回值为xml类型,部分语法不同。

10

XMLPARSE

支持,有差异

返回值为xml类型,部分功能存在差异。

11

XMLROOT

支持,有差异

返回值为xml类型,部分功能存在差异。

12

JSON_OBJECT

支持

-

13

XMLTABLE

支持,有差异

从xml中选取数据使用的为XPath 1.0表达式,不支持声明默认命名空间,不支持多组输入及取别名,不支持省略传入数据的passing_clause子句,不支持RETURNING SEQUENCE BY REF子句和( SEQUENCE ) BY REF子句。

表9 编码解码函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

DECODE

支持

-

2

DUMP

支持,有差异

因存储格式不同,数值和时间类型返回结果和Oracle数据库不一致。

3

ORA_HASH

支持,有差异

  • 时间类型的入参转换成字符串类型再进行hash。
  • 不支持maxbucket参数。

4

VSIZE

支持,有差异

数值和时间类型返回结果和Oracle数据库不一致,如GaussDB select vsize(999); 返回3;Oracle select vsize(999) from dual; 返回4。

表10 空值相关的函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

COALESCE

支持

-

2

LNNVL

支持,有差异

入参condition不完全一致。

3

NULLIF

支持

-

4

NVL

支持

-

5

NVL2

支持

-

表11 环境和标识符函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

SYS_CONTEXT

支持,有差异

GaussDB对不支持的参数返回NULL。

以下为不支持的参数列表:

'action'

'is_application_root'

'is_application_pdb'

'audited_cursorid'

'authenticated_identity'

'authentication_data'

'authentication_method'

'cdb_domain'

'cdb_name'

'client_identifier'

'con_id'

'con_name'

'current_sql_length'

'db_domain'

'db_supplemental_log_level'

'dblink_info'

'drain_status'

'entryid'

'enterprise_identity'

'fg_job_id'

'global_uid'

'identification_type'

'instance'

'is_dg_rolling_upgrade'

'ldap_server_type'

'module'

'network_protocol'

'nls_calendar'

'nls_sort'

'nls_territory'

'oracle_home'

'os_user'

'platform_slash'

'policy_invoker'

'proxy_enterprise_identity'

'proxy_user'

'proxy_userid'

'scheduler_job'

'session_edition_id'

'session_edition_name'

'sessionid'

'statementid'

'terminal'

'unified_audit_sessionid'

'session_default_collation'

'client_info'

'bg_job_id'

'client_program_name'

'current_bind'

'global_context_memory'

'host'

'current_sqln'

2

USER

支持,有差异

返回值类型不一致,GaussDB返回值类型为name,Oracle返回值类型为varchar2。

表12 聚合函数

序号

Oracle数据库函数

GaussDB数据库是否支持

差异

1

AVG

支持,有差异

未考虑窗口函数(over子句)的差异点。

2

CORR

支持

-

3

COUNT

支持

-

4

COVAR_POP

支持

-

5

COVAR_SAMP

支持

-

6

CUME_DIST

支持

-

7

DENSE_RANK

支持

-

8

FIRST

支持

-

9

GROUPING

支持

-

10

LAST

支持

-

11

LISTAGG

支持

-

12

MAX

支持

-

13

MEDIAN

支持

-

14

MIN

支持

-

15

PERCENT_RANK

支持

-

16

PERCENTILE_CONT

支持

-

17

RANK

支持

-

18

REGR_ (Linear Regression)

支持

-

19

STDDEV

支持

-

20

STDDEV_POP

支持

-

21

STDDEV_SAMP

支持

-

22

SUM

支持

-

23

VAR_POP

支持

-

24

VAR_SAMP

支持

-

25

VARIANCE

支持

-

26

WM_CONCAT

支持,有差异

使用GaussDB已经兼容的LISTAGG,STRING_AGG函数,兼容此功能。

表13 分析函数

序号

Oracle数据库函数

GaussDB数据库是否支持

1

FIRST_VALUE

支持

2

LAG

支持

3

LAST_VALUE

支持

4

LEAD

支持

5

NTH_VALUE

支持

6

NTILE

支持

7

ROW_NUMBER

支持

8

RATIO_TO_REPORT

支持

support.huaweicloud.com/productdesc-gaussdb/gaussdb-39-0011.html