GreenPlum内置的 SQL 操作符相对较多,常用的操作符和 GBase 基本上都可以对应上,但是也有一些GreenPlum特有操作符,在迁移至GBase,需要进行相应的转换。

其中常见的操作符主要包括算术操作符、连接操作符、位操作符和集合操作符等。另外不常见的操作符主要为范围操作符

1.1.2. 算术操作符

算术操作符由于相对通用,已经得到广泛的使用,各个数据库之间不会存在太大的差异,GreenPlum和GBase也不例外,每一个GreenPlum的算术操作符都有一个同样的 GBase 操作符与之对应,因此在进行算术操作符迁移时不需要进行任何修改。

1.1.2.1. +

在一元操作时,需要一个真实的数字或时间的表达式,在二元操作时需要两个数字或时间表达式。

GBase 替代: +

1.1.2.2. 

在一元操作时,需要一个真实的数字或时间的表达式,在二元操作时需要两个数字或时间表达式。

GBase 替代: -

1.1.2.3. *

二元操作符,乘法的数学表达式。

GBase 替代: *

1.1.2.4. /

二元操作符,除法的数学表达式。

GBase 替代: /

1.1.3. 连接操作符

如果 GBase 启动时使用 –ansi 选项,则支持 || 作为连接符,这种情况下在迁移时不需要作改变。在默认的启动模式下,需要将 || 用 CONCAT('string1', 'string2') 来替代。

1.1.3.1. ||

字符串或非字符串同字符串或非字符串的连接符。

GBase 替代:(GBase系统变量sql_mode包含PIPES_AS_CONCAT): ||

GBase 替代: CONCAT('string1', 'string2'),使用concat函数是正确的、完备的替换方式。

1.1.4. 位操作符

位操作符主要用于检查和操作位串,进行一系列的位操作,例如位与、位或、位异或、位非和位移等,其中位与、位或和位异或操作必须等长。

1.1.4.1. &

位与,二进制位与操作。

GBase替代:&

1.1.4.2. |

位或,二进制按位或操作。

GBase替代:|

1.1.4.3. #

位异或,二进制位异或操作。

GBase替代:^

1.1.4.4. ~

位非,二进制位非操作。

GBase替代:~

注意:GreenPlum中该操作符返回的值为有符号类型,而GBase返回的是无符号类型

1.1.4.5. <<

位移,二进制位左移

GBase替代:<<

1.1.4.6. >>

位移,二进制位右移

GBase替代:>>

1.1.5. 集合操作符

GreenPlum的集合操作符主要包括集合并、集合交和集合差,其中集合并和集合交同GBase的一致的,但是集合差GreenPlum采用EXCEPT作为关键字,GBase采用的事MINUS。因此迁移时仅需要注意集合差,其它的可以不用作任何修改。

1.1.5.1. INTERSECT

联合两个 SELECT 查询,返回两个查询中所有不重复的行。

GBase 替代: INTERSECT

1.1.5.2. EXCEPT

联合两个 SELECT 查询,返回所有在第一个查询中存在但是不再第二个查询中的行。

GBase 替代: MINUS

1.1.5.3. UNION

联合两个 SELECT 查询,返回任意查询中存在的行(不重复)。

GBase 替代: UNION

1.1.5.4. UNION ALL

联合两个 SELECT 查询,返回两个查询中存在的所有行。

GBase 替代: UNION ALL

1.1.6. 操作符优先级

在一个 SQL 表达式中如果存在多个操作符,数据库系统会按一定的顺序来执行他。GreenPlum 在执行对操作符的使用采取优先级从高到低的原则。同级操作符,遵循从左向右原则。圆括号中的操作优先与括号外的操作。GBase 同样遵守这些规则。

下表从高到低列出了 GreenPlum 和 GBase 的操作符优先级。在这个表中没有包括 INTERSECT, MINUS, UNION ,联合操作都相当与原子数据值。在GreenPlum 中所有的集合操作符都拥有相同的优先级。

GreenPlum

GBase

一元 +,  一元 -   

一元 +,一元 -  

*, /

*, /

二元 +,二元 -, ||

二元 +,二元 -

SQL 谓词

SQL谓词