更新时间:2022-07-29 GMT+08:00

Oracle、Teradata和MySQL语法兼容性差异

GaussDB(DWS)支持Oracle、Teradata和MySQL三种兼容模式,分别兼容Oracle、Teradata和MySQL语法,不同兼容模式下的语法行为有一些差异。

表1 兼容项差异

兼容项

Oracle兼容

Teradata兼容

MySQL兼容

空串

只有NULL

区分空串和NULL

区分空串和NULL

空串转数字

NULL

转换为0

转换为0

超长字符自动截断

不支持

支持(GUC参数td_compatible_truncation设置为ON)

不支持

NULL拼接

非NULL对象与NULL拼接后返回非NULL对象。

例如,'abc'||NULL返回'abc'。

GUC参数behavior_compat_options增加strict_text_concat_td选项后,兼容TD行为,NULL类型拼接后返回NULL。

例如,'abc'||NULL返回NULL。

兼容MySQL行为,NULL类型拼接后返回NULL。

例如,'abc'||NULL返回NULL。

char(n)类型拼接

char(n)类型做拼接时移除右侧空格和占位。

例如,cast('a' as char(3))||'b'返回'ab'。

GUC参数behavior_compat_options增加bpchar_text_without_rtrim选项后,char(n)类型做拼接时,保留空格,并补足空格至指定的n长度。

当前不支持“比较字符串时忽略尾部空格”,拼接后结果如果存在尾部空格,进行比较时会对空格敏感。

例如,cast('a' as char(3))||'b'返回'a b'。

移除右侧空格和占位

concat(str1,str2)

返回所有非NULL字符串的连接

返回所有非NULL字符串的连接

入参中存在NULL时,返回结果为NULL

left和right负数处理

返回除最后/前|n|个字符以外的所有字符

返回除最后/前|n|个字符以外的所有字符

返回空串

lpad(string text, length int [, fill text])

rpad(string text, length int [, fill text])

通过填充字符fill(缺省为空格),把string填充到length长度,如果string已经比length长则将其尾部截断。如果fill为空串或者length为负数则返回null。

如果fill为空串且string长度小于length时,返回原字符串,如果length为负数则返回空串。

如果fill为空串且string长度小于length时,返回空串,如果length为负数则返回null。

log(x)

以10为底的对数

以10为底的对数

自然对数

mod(x, 0)

除数为0时返回x

除数为0时返回x

除数为0时报错

数据类型date

date会转为timestamp,包含年月日时分秒

只有年月

只有年月

to_char(date)

入参最大值仅支持timestamp类型的最大值,不支持date类型的最大值;返回值类型为timestamp

入参最大值仅支持timestamp类型的最大值,不支持date类型的最大值;返回值类型为date,且格式为'YYYY/MM/DD'(GUC参数convert_empty_str_to_null_td打开)

入参最大值仅支持timestamp类型的最大值,不支持date类型的最大值;返回值类型为date

to_date, to_timestamp和to_number空串处理

返回NULL

返回NULL(GUC参数convert_empty_str_to_null_td打开)

to_date和to_timestamp返回NULL,to_number中参数为空串时,返回0。

last_day和next_day返回类型

timestamp类型

timestamp类型

date类型

add_months返回类型

timestamp类型

timestamp类型

入参为date类型,返回date类型

入参为timestamp类型,返回timestamp类型

入参为timestamptz类型,返回timestamptz类型

CURRENT_TIME

CURRENT_TIME(p)

获取当前事务的时间,返回值类型为timetz

获取当前事务的时间,返回值类型为timetz

获取当前语句执行时的时间,返回值类型为time

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP(p)

获取当前语句执行时的时间,返回值类型为timestamptz

获取当前语句执行时的时间,返回值类型为timestamptz

获取当前语句执行时的时间,返回值类型为timestamp

LOCALTIME

LOCALTIME(p)

获取当前事务的时间,返回值类型为time

获取当前事务的时间,返回值类型为time

获取当前语句执行时的时间,返回值类型为time

LOCALTIMESTAMP

LOCALTIMESTAMP(p)

获取当前事务的时间,返回值类型为timestamp

获取当前事务的时间,返回值类型为timestamp

获取当前语句执行时的时间,返回值类型为timestamp

SYSDATE

SYSDATE(p)

获取当前语句执行时的时间,返回值类型为timestamp(0)

获取当前语句执行时的时间,返回值类型为timestamp(0)

获取当前系统的时间,返回值类型为timestamp(0)

NOW()

获取当前事务时间,返回值类型为timestamptz

获取当前事务时间,返回值类型为timestamptz

获取语句执行的时间,返回值类型为timestamptz

操作符'^'

幂运算

幂运算

异或

表达式case、coalesce、if、ifnull入参类型不同

报错

兼容TD行为,支持数字和字符串之间的类型转换,比如coalesce参数输入int和varchar类型,解析成varchar类型。

兼容MySQL行为,支持其他类型和字符串之间的类型转换,比如coalesce参数输入date、int和varchar类型,解析成varchar类型。