首页
编程教程
编程导航
编程百科
编程问答
编程博文
编程实例
硬件设备
网络运营
软件教程
移动数码
办公软件
操作系统
网络运维
设计教程
postgresql-常量
Postgre SQL
2020-06-02
4.1.2.2. 美元符包围字串常量 尽管声明字串常量的标准
方法
通常都很方便,但是如果字串包含很多单引号或者反斜杠, 那么理解字串的
内容
可能就会变得很苦涩,因为每个单引号都要加倍。 为了让这种场合下的
查询
更具可读性,Postgre
sql
允许另外一种称作"美元符包围"的字串常量声明办法。
一个
通过美元符包围声明的字串常量由
一个
美元符号($),
一个
可选的零个或多个字符"记号", 另外
一个
美元符号,
一个
组成字串常量的任意字符的序列,
一个
美元符号,以及
一个
和开始这个美元符包围的记号相同的记号,和
一个
美元符号组成。 比如,下面是两个不同的
方法
,用美元符包围声明了前面的例子: $$Dianne's horse$$ $So
Meta
g$Dianne's horse$So
Meta
g$ 请注意,在美元符包围的字串里,单引号可以不用逃逸使用。 实际上,在
一个
美元符包围的字串里,没有什么字符需要逃逸: 字串
内容
总是按照字面
内容
写。反斜杠不是特殊的, 美元符自己也不是特殊的,除非它们和开
标签
的一部分匹配。 我们可以通过在不同嵌套级别使用不同的美元符引号字串常量来实现嵌套。 最常见的是写
函数
定义的时候。比如: $function$ BEGIN RETURN ($1 ~ $q$[\t\r\n\v\\]$q$); END; $function$ 这里,序列 $q$[\t\r\n\v\\]$q$ 表示
一个
美元符包围的字串文本 [\t\r\n\v\\], 在
函数
体被 Postgre
sql
执行的时候,它将被识别出来。 但是因为这个序列不匹配外层的美元符分隔符$function$, 所以只要考虑了外层字串,它就只是常量里面的一些额外的字符而已。 如果有
标签
的话,
一个
美元符包围的字串遵循和无引号包围的标识符相同的规则, 只是它不能包含美元符。
标签
是大小写相关的,因此 $tag$String content$tag$ 是正确的,而 $TAG$String content$tag$ 不对。
一个
后面跟着关键字或者标识符的美元包围的字串必须用空白隔开; 否则美元符包围分隔符将会被认为前面标识符的一部分。 美元符包围不是
sql
标准,但是在写复杂的字串文本的时候,它通常比标准的单引号语法更方便。 尤其是在其它常量里表现字串常量的时候更有用,比如经常在过程
函数
定义里面的。 如果用单引号语法,每个上面例子里的反斜杠都必须写四个,它们在作为字串文本分析的时候会减少为两个, 然后在
函数
执行的时候在内层字串常量里会再次被解析为
一个
。 4.1.2.3. 位串常量 位串常量看起来很象在开引号前面有
一个
B (大写或小写)的普通字符串(它们之间没有空白), 比如 B'1001'。位串常量里可以用的字符只有 0 和 1。 另外,位串常量可以用十六进制表示法声明,
方法
是使用前缀的 X (大写或者小写),比如,X'1FF'。 这种表示法等效于
一个
每个十六进制位四个二进制位的位串常量。 两种形式的位串常量都可以象普通字串常量那样跨行连续。 美元符包围不能用于位串常量。 4.1.2.4. 数值常量 数值常量接受下列通用的形式: digits digits.[digits][e[+-]digits] [digits].digits[e[+-]digits] digitse[+-]digits 这里的 digits 是
一个
或多个十进制位(0 到 9)。 如果有小数点,那么至少有一位在小数点前面或后面。如果出现了指数分隔符(e),那么至少有
一个
位跟在它后面。 在常量里不能有空格或者其他字符嵌入在内。 请注意任何前导地正号或者负号实际上都不认为是常量的一部分; 它是施加于常量的
一个
操作符。 这里是一些合法的数值常量的例子: 42 3.5 4. .001 5e2 1.925e-3 如果
一个
数值常量既不包含小数点,也不包含指数操作符, 那么如果它的数值可以放在integer类型中(32位), 则认为它是integer类型;如果它的数值可以放在 bigint中(64位),则认为它是 bigint; 否则认为它是 numeric类型。包含小数点和/或指数操作符的常量总是被认为是numeric类型。 给
一个
数值常量赋予初始数据类型只是类型解析算法的开端。 在大多数情况下该常量会根据环境被
自动
强制转换成最合适的类型。 必要时,你可以通过强制类型转换把
一个
数值解析成特定的数据类型。 比如,你可以强制要求把
一个
数值当作类型real(float4)来看,
方法
是这么写: REAL '1.23' -- 字串风格 '1.23'::REAL -- Postgre
sql
(历史原因)风格 这些实际上只是下面讨论的通用转换的特例。 4.1.2.5. 其它类型的常量 任意类似的常量可以用下列表示法中的任何一种来输入: type 'string' 'string'::type CAST ( 'string' AS type ) 在字串常量的文本将传递给那种叫 type 的类型的输入转换过程。 结果是这种类型的
一个
常量。如果不存在该常量所属类型的歧义, 那么明确的类型映射可以省略(比如,当你把它直接赋予
一个
表字段的时候), 这种情况下它会
自动
转换。 字串常量可以用普通
sql
表示法或者美元符包围来书写。 我们还可以用
函数
样的语法来声明类型转换: typename ( 'string' ) 不过并非所有类型名可以这样使用;参阅 Section 4.2.8
获取
细节。 ::,CAST(),和
函数
调用
语法也可以用于声明任意表达式的运行时类型转换, 如 Section 4.2.8 中讨论的那样。 但是 type 'string' 的形式只能用于声明
一个
文本常量的类型。 type 'string' 的另外
一个
限制是它不能用于数组类型;要用 :: 或者 CAST() 声明
一个
数组常量的类型。 CAST() 语法遵循
sql
。 type 'string' 语法是标准的
一个
推广:
sql
只是给少数几种数据类型声明了这个语法, 但 Postgre
sql
允许将其用于所有类型。带 :: 的语法是 Postgre
sql
的历史
用法
,
函数
调用
语法也是。
相关文章
PostGreSQL到Oracle的数据迁移
项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
怎么查看PostgreSQL数据库中所有表
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
postgresql 报错 FATAL: no pg_hba.conf entry for host 未配置允许远程连接 解决方法
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
postgresql 数据库 报错 server closed the connection unexpectedly 无法远程连接数据库 解决方法
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
postgresql 报错 SQLSTATE[08006] [7] SCRAM authentication requires libpq version 10 or above 解决方法
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
postgresql 报错 psycopg2.OperationalError: SSL SYSCALL error: EOF detected 解决方法
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...