PostgreSQL教程-sql语法-值表达式-排序规则表达式
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询PostgreSQL教程-sql语法-值表达式-排序规则表达式
4.2.10. 排序规则表达式
COLLATE子句会重载一个表达式的排序规则。它被追加到它适用的表达式:
expr COLLATE collation
这里collation可能是一个受模式限定的标识符。COLLATE子句比操作符绑得更紧,需要时可以使用圆括号。
如果没有显式指定排序规则,数据库系统会从表达式所涉及的列中得到一个排序规则,如果该表达式没有涉及列,则会默认采用数据库的默认排序规则。
COLLATE子句的两种常见使用是重载ORDER BY子句中的排序顺序,例如:
SELECT a, b, c FROM tbl WHERE ... ORDER BY a COLLATE "C";
以及重载具有区域敏感结果的函数或操作符调用的排序规则,例如:
SELECT * FROM tbl WHERE a > 'foo' COLLATE "C";
注意在后一种情况中,COLLATE子句被附加到我们希望影响的操作符的一个输入参数上。COLLATE子句被附加到该操作符或函数调用的哪个参数上无关紧要,因为被操作符或函数应用的排序规则是考虑所有参数得来的,并且一个显式的COLLATE子句将重载所有其他参数的排序规则(不过,附加非匹配COLLATE子句到多于一个参数是一种错误。详见第 23.2 节)。因此,这会给出和前一个例子相同的结果:
SELECT * FROM tbl WHERE a COLLATE "C" > 'foo';
但是这是一个错误:
SELECT * FROM tbl WHERE (a > 'foo') COLLATE "C";
因为它尝试把一个排序规则应用到>操作符的结果,而它的数据类型是非可排序数据类型boolean。