数据仓库服务 GAUSSDB(DWS)-排序规则:排序规则组合原则

时间:2024-06-07 10:53:48

排序规则组合原则

  • 当表达式的collation未指定时,则认为是默认的排序规则default,它表示数据库的区域设置。表达式的collation也可能是不确定的,此时,排序操作和其他不确定的排序规则的操作就会失败。
  • 对于函数或操作符调用,其排序规则将通过检查所有参数的collation来决定。如果该函数或操作符调用的结果是一种可排序的数据类型,若有外层表达式要用到排序规则,那么该外层的表达式将继承对应函数和操作符所调用结果集的排序规则。
  • 表达式的排序规则派生可以是显式或隐式。该区别会影响多个不同的排序规则出现在同一个表达式中时如何对collation进行组合。当执行语句使用COLLATE子句时,将发生显式派生,否则为隐式派生。当多个排序规则组合时,规则如下:
    • 如果输入表达式中存在显式COLLATE派生,则在输入表达式之间的所有显式派生的COLLATE必须相同,否则将产生冲突错误。如果存在显式COLLATE,那它就是排序规则组合的结果。
    • 如果不存在显式COLLATE,那所有输入表达式必须具有相同的隐式COLLATE或默认COLLATE。如果存在非默认COLLATE,那它就是排序规则组合的结果。否则,结果是默认COLLATE。
    • 如果在输入表达式之间存在多个冲突的非默认COLLATE,则组合被认为是具有不确定排序规则,这并非一种错误。如果被调用的函数或表达式需要用到排序规则,运行时将产生排序规则未知的错误。
  • CASE表达式中,比较行为使用的规则以WHEN子句中的COLLATE设置为准。
  • 显示COLLATE的派生仅在当前查询(CTE或SUBQUERY)中生效,查询外则降为隐式派生。
support.huaweicloud.com/devg-dws/dws_04_0984.html