postgresql笔记007—SQL语句-词法结构—2常量
词法结构—002常量
pgsql里面有三种隐含类型的常量:字符串,位串,数值。常量也可以声明为明确的类型,这样可以使用更加准确地表现形式,以及可以被系统更加有效的处理。
一、字符串常量
授权量里的一个文本常量是用单引号 ’ 包围的任意字符序列,比如 ‘This is a string’ 在这种类型的字符串创两里面嵌入单引号的标准兼容的做法是敲两个连续的单引号。
比如 ‘Dianne’‘s horse’ 。 注意:两个连续的单引号不是双引号 (’’)。
两个只是通过至少一个换行符的空白分割的字符串常量会被连接在一起,并当做他们是写成一个常量处理。比如:
select 'foo'
'bar'
等效于
select 'foobar';
但是下面是非法的:
select 'foo' 'bar';
postgresql 还允许转义字符串中的内容,这是一个postgresql对SQL标准的扩展。
转义字符串语法是通过在字符串前些字母E(大写或者小写)的方法声明的。比如E’foo’。
(当需要续航包含转义字符的字符串时,仅需要在第一行的开始引号前写上E就可以了。)
在转义字符中,通过一个反斜杠()开始C风格的反斜杠转义序列,在该转义中反斜杠与其之后字符的组合代表一个特殊的字节值。
反斜杠转义序列 | 解释 |
---|---|
\b | 退格 |
\f | 进纸 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\o,\oo,\ooo(o=0-7) | 八进制字节值 |
\xh,\xhh(h=0-9,A-F) | 十六进制字节值 |
\uxxxx,\Uxxxxxxxx(x=0-9, A-F) | 16或32位十六进制Unicode字符值 |
任何其它跟在反斜杠后面的字符都当做文本看待。因此,要在字符产常量里面包含反斜杠,则要写两个反斜杠(\)。
另外,postgresql 里允许用一个反斜杠来转义单引号’ ,不过,最好使用两个单引号 ‘’ 来替代 '。
只有服务器字符集是UTF-8时,才会完全使用Unicode转义语法。
编码为零的字符不允许出现在字符串常量中。
数值常量
在数值常量里不能有空格或者其它字符,如果出现了指数标记(e)那么至少有一个数字跟在他后面。
下面是一些合法的数值常量的例子。
33
3.4
3.
.001
3e2
1.43e-3
如果一个数值常量及不包含小数点,也不包含指数,那么如果它的数值可以放到integer类型中(32位),则认为他是integer类型,如果它的数值可以放到bigint中(64位),则认为他是bigint,否则认为它是numeric类型。包含小数点或指数的常量,总是被认为是numeric类型。
给一个数值常量赋予初始数据类型只是类型解析算法的开端。在大多数情况下,该常量只会根据环境被自动强制转换成最合适的类型。必要时,你可以通过强制类型转换把一个数值解析成特定的数据类型。
比如,我们可以强制要求把一个数值当做real(float4)类型来看,
方法是这样的写的 :
real '1.23' -- 字符串风格
1.23:: real -- postgresql (历史的)风格
美元符尹红字符串常量
…
其他类型的常量
任意类型的常量都可以用下列表示法中的任意一种来输入:
type ‘string’
‘string’:: type
cast(‘string’ as type)
其中字符串常量的文本将会被带入到类型type的输入转换过程。
其结果是一个该类型的常量。
如果不存在该常量所属类型的歧义,那么可以省略明确的类型转换(比如,把它直接赋予一个表字段的时候),这种情况下它会自动转换。