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谓词 |