1005.常量
在PostgreSQL中有三种隐式类型常量:字符串、位串和数字。
字符串常量:
在SQL中,一个字符串常量是一个由单引号(')包围的任意字符序列,例如'This is a string'。
为了在一个字符串中包括一个单引号,可以写两个相连的单引号,例如'Dianne''s horse'。要包括一个反斜线字符,请写两个反斜线(\\)
两个只由空白及至少一个新行分隔的字符串常量会被连接在一起,并且将作为一个写在一起的字符串常量来对待。例如:
SELECT 'foo'
'bar';
等同于:
SELECT 'foobar';
如果配置参数standard_conforming_strings为off,那么PostgreSQL对常规字符串常量和转义字符串常量中的反斜线转义都识别。
不过,从PostgreSQL 9.1 开始,该参数的默认值为on,意味着只在转义字符串常量中识别反斜线转义。
美元引用的字符串常量
PostgreSQL提供了另一种被称为“美元引用”的方式来书写字符串常量。
一个美元引用的字符串常量由一个美元符号($)、一个可选的另个或更多字符的“标签”、另一个美元符号、一个构成字符串内容的任意字符序列、一个美元符号、开始这个美元引用的相同标签和一个美元符号组成。
例如,这里有两种不同的方法使用美元引用指定字符串“Dianne's horse”:
$$Dianne's horse$$
$SomeTag$Dianne's horse$SomeTag$
一个美元引用字符串的标签(如果有)遵循一个未被引用标识符的相同规则,除了它不能包含一个美元符号之外。
标签是大小写敏感的,因此$tag$String content$tag$是正确的,但是$TAG$String content$tag$不正确。
美元引用不是 SQL 标准的一部分,但是在书写复杂字符串文字方面,它常常是一种比兼容标准的单引号语法更方便的方法。
数字常量
如果使用了小数点,在小数点前面或后面必须至少有一个数字。
如果存在一个指数标记(e),在其后必须跟着至少一个数字。
在该常量中不能嵌入任何空白或其他字符。
注意任何前导的加号或减号并不实际被考虑为常量的一部分,它是一个应用到该常量的操作符。
如果一个不包含小数点和指数的数字常量的值适合类型integer(32 位),它首先被假定为类型integer。
否则如果它的值适合类型bigint(64 位),它被假定为类型bigint。
再否则它会被取做类型numeric。
包含小数点和/或指数的常量总是首先被假定为类型numeric。
必要时,你可以通过造型它来强制一个数字值被解释为一种指定数据类型。例如,你可以这样强制一个数字值被当做类型real(float4):
REAL '1.23' -- string style
1.23::REAL -- PostgreSQL (historical) style
带有::的语法是PostgreSQL的历史用法,就像函数调用语法一样。
CAST()以及函数调用语法也可以被用来指定任意表达式的运行时类型转换。