logo
GBase 8a
适配迁移
文章

南大通用数据迁移之GP_To_GBase8a(二)操作符详解

Robin
发表于2024-06-11 20:11:30302次浏览0个评论

1.综述

        GreenPlum内置的 SQL 操作符相对较多,常用的操作符和 GBase 基本上都可以对应上,但是也有一些GBase不支持的。其中常见的操作符主要包括算术操作符、连接操作符、位操作符和集合操作符等。另外不常见的操作符主要为范围操作符。

1.1.算术操作符

        算术操作符由于相对通用,已经得到广泛的使用,各个数据库之间不会存在太大的差异,GreenPlum和GBase也不例外,每一个GreenPlum的算术操作符都有一个同样的 GBase 操作符与之对应,因此在进行算术操作符迁移时不需要进行任何修改。
1.1.1.+
        在一元操作时,需要一个真实的数字或时间的表达式,在二元操作时需要两个数字或时间表达式。
        GBase 替代: +
1.1.2.–
        在一元操作时,需要一个真实的数字或时间的表达式,在二元操作时需要两个数字或时间表达式。
        GBase 替代: -
1.1.3.*
        二元操作符,乘法的数学表达式。
        GBase 替代: *
1.1.4./
        二元操作符,除法的数学表达式。
        GBase 替代: /

1.2.连接操作符

        如果 GBase 启动时使用 –ansi 选项,则支持 || 作为连接符,这种情况下在迁移时不需要作改变。在默认的启动模式下,需要将 || 用 CONCAT('string1', 'string2') 来替代。
1.2.1.||
        字符串或非字符串同字符串或非字符串的连接符。
        GBase 替代:(GBase系统变量sql_mode包含PIPES_AS_CONCAT): ||
        GBase 替代: CONCAT('string1', 'string2'),使用concat函数是正确的、完备的替换方式。

1.3.位操作符

        位操作符主要用于检查和操作位串,进行一系列的位操作,例如位与、位或、位异或、位非和位移等,其中位与、位或和位异或操作必须等长。
1.3.1.&
        位与,二进制位与操作。
        GBase替代:&
1.3.2.|
        位或,二进制按位或操作。
GBase替代:|
1.3.3.#
        位异或,二进制位异或操作。
        GBase替代:^
1.3.4.~
        位非,二进制位非操作。
        GBase替代:~
        注意:GreenPlum中该操作符返回的值为有符号类型,而GBase返回的是无符号类型
1.3.5.<<
        位移,二进制位左移
        GBase替代:<<
1.3.6.>>
        位移,二进制位右移
        GBase替代:>>

1.4.集合操作符

        GreenPlum的集合操作符主要包括集合并、集合交和集合差,其中集合并和集合交同GBase的一致的,但是集合差GreenPlum采用EXCEPT作为关键字,GBase采用的事MINUS。因此迁移时仅需要注意集合差,其它的可以不用作任何修改。
1.4.1.INTERSECT
        联合两个 SELECT 查询,返回两个查询中所有不重复的行。
        GBase 替代: INTERSECT
1.4.2.EXCEPT
        联合两个 SELECT 查询,返回所有在第一个查询中存在但是不再第二个查询中的行。
        GBase 替代: MINUS
1.4.3.UNION
        联合两个 SELECT 查询,返回任意查询中存在的行(不重复)。
        GBase 替代: UNION
1.4.4.UNION ALL
        联合两个 SELECT 查询,返回两个查询中存在的所有行。
        GBase 替代: UNION ALL

1.5.操作符优先级

        在一个 SQL 表达式中如果存在多个操作符,数据库系统会按一定的顺序来执行他。GreenPlum 在执行对操作符的使用采取优先级从高到低的原则。同级操作符,遵循从左向右原则。圆括号中的操作优先与括号外的操作。GBase 同样遵守这些规则。
        下表从高到低列出了 GreenPlum 和 GBase 的操作符优先级。在这个表中没有包括 INTERSECT, MINUS, UNION ,联合操作都相当与原子数据值。在GreenPlum 中所有的集合操作符都拥有相同的优先级。

评论

登录后才可以发表评论