添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

表1 兼容项差异

Oracle兼容

Teradata兼容

MySQL兼容

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)。此函数不可下推,建议用current_date代替。

NOW()

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

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

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

操作符'^'

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

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

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