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类型。