PostgreSQL教程-sql语法-值表达式-下标-域选择-操作符调用
4.2.3. 下标
如果一个表达式得到了一个数组类型的值,那么可以抽取出该数组值的一个特定元素:
expression[subscript]
或者抽取出多个相邻元素(一个“数组切片”):
expression[lower_subscript:upper_subscript]
(这里,方括号[ ]表示其字面意思)。每一个下标自身是一个表达式,它必须得到一个整数值。
通常,数组表达式必须被加上括号,但是当要被加下标的表达式只是一个列引用或位置参数时,括号可以被忽略。还有,当原始数组是多维时,多个下标可以被连接起来。例如:
mytable.arraycolumn[4]
mytable.two_d_column[17][34]
$1[10:42]
(arrayfunction(a,b))[42]
最后一个例子中的圆括号是必需的。详见第 8.15 节。
4.2.4. 域选择
如果一个表达式得到一个组合类型(行类型)的值,那么可以抽取该行的指定域
expression.fieldname
通常行表达式必须被加上括号,但是当该表达式是仅从一个表引用或位置参数选择时,圆括号可以被忽略。例如:
mytable.mycolumn
$1.somecolumn
(rowfunction(a,b)).col3
(因此,一个被限定的列引用实际上只是域选择语法的一种特例)。一种重要的特例是从一个组合类型的表列中抽取一个域:
(compositecol).somefield
(mytable.compositecol).somefield
这里需要圆括号来显示compositecol是一个列名而不是一个表名,在第二种情况中则是显示mytable是一个表名而不是一个模式名。
你可以通过书写.*来请求一个组合值的所有域:
(compositecol).*
这种表示法根据上下文而表现不同;有关详细信息,请参见第 8.16.5 节。
4.2.5. 操作符调用
对于一次操作符调用,有三种可能的语法:
expression operator expression(二元中缀操作符)
operator expression(一元前缀操作符)
expression operator(一元后缀操作符)
其中operator记号遵循第 4.1.3 节的语法规则,或者是关键词AND、OR和NOT之一,或者是一个如下形式的受限定操作符名:
OPERATOR(schema.operatorname)
哪个特定操作符存在以及它们是一元的还是二元的取决于由系统或用户定义的那些操作符。第 9 章描述了内建操作符。