PostgreSQL中美元符号引用的字符串常量

虽然用于指定字符串常量的标准语法通常都很方便,但是当字符串中包含了很多单引号或反斜线时很难理解它,因为每一个都需要被双写。要在这种情形下允许可读性更好的查询,PostgreSQL提供了另一种被称为“美元引用”的方式来书写字符串常量。一个美元引用的字符串常量由一个美元符号($)、一个可选的另个或更多字符的“标签”、另一个美元符号、一个构成字符串内容的任意字符序列、一个美元符号、开始这个美元引用的相同标签和一个美元符号组成。例如,这里有两种不同的方法使用美元引用指定字符串“Dianne’s horse”:

$$Dianne’s horse$$

$SomeTag$Dianne’s horse$SomeTag$

注意在美元引用字符串中,单引号可以在不被转义的情况下使用。事实上,在一个美元引用字符串中不需要对字符进行转义:字符串内容总是按其字面意思写出。反斜线不是特殊的,并且美元符号也不是特殊的,除非它们是匹配开标签的一个序列的一部分。

可以通过在每一个嵌套级别上选择不同的标签来嵌套美元引用字符串常量。这最常被用在编写函数定义上。例如:

$function$

BEGIN

RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);

END;

$function$

这里,序列$q$[\t\r\n\v\\]$q$表示一个美元引用的文字串[\t\r\n\v\\],当该函数体被PostgreSQL执行时它将被识别。但是因为该序列不匹配外层的美元引用的定界符$function$,它只是一些在外层字符串所关注的常量中的字符而已。一个美元引用字符串的标签(如果有)遵循一个未被引用标识符的相同规则,除了它不能包含一个美元符号之外。标签是大小写敏感的,因此$tag$String content$tag$是正确的,但是$TAG$String content$tag$不正确。一个跟着一个关键词或标识符的美元引用字符串必须用空白与之分隔开,否则美元引用定界符可能会被作为前面标识符的一部分。

美元引用不是SQL 标准的一部分,但是在书写复杂字符串文字方面,它常常是一种比兼容标准的单引号语法更方便的方法。当要表示的字符串常量位于其他常量中时它特别有用,这种情况常常在过程函数定义中出现。如果用单引号语法,上一个例子中的每个反斜线将必须被写成四个反斜线,这在解析原始字符串常量时会被缩减到两个反斜线,并且接着在函数执行期间重新解析内层字符串常量时变成一个。

更多相关文章
  • java中的堆.栈.常量池 分类: java2010-01-15 03:03 4248人阅读 评论(5) 举报 javastring编译器jvm存储equals Java内存分配: 1. 寄存器:我们在程序中无法控制2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中3. ...
  • 使用MicrosoftRoslyn提取C#和VB.NET源代码中的字符串常量
    Microsoft Roslyn是微软.NET“编译器即服务(Compiler as a Service)”的主要产品,它提供了开放的编译器API,并为源代码产生.分析和重构提供了新一代的语言对象模型.Anders Hejlsberg在BUILD 2013大会上提到,C# 6.0的编译器将使用Ros ...
  • linux脚中经常会遇到一大堆美元符号 ($),有些符号容易搞混,他们代表的含义我做个记录:$0  shell的命令本身(包括完整路径)$1到$9 数字表示shell 的第几个参数 $# 传递到脚本的参数个数$* 以一个单字符串显示所有向脚本传递的参数$$ 脚本运行的ID号$! 后台运行的最后一个进 ...
  • 字符串常量最好放到xml中
  • PostgreSQL中日期类型与字符串类型的转换方法 示例如下: postgres=# select current_date;date ------------2015-08-31(1 row) postgres=# select to_char(current_date,'YYYYMMDD'); ...
  • 转自:http://blog.csdn.net/able_cy/archive/2010/10/16/5944948.aspx系统实验中遇到了一些输入特殊字符出错的问题,查阅之后发现这属于linux中特殊符号的用法,查阅资料转载如下:1.{} 大括号:用法一:通配符扩展eg: ls my_{fing ...
  • String a="a"+"b"+"c" 创建了几个对象这个问题涉及到了字符串常量池和字符串拼接String a="a"+"b"+"c"通过编译器优化后,得到的效果是String  ...
  • 下面主要介绍JAVA中的堆.栈和常量池:1.寄存器最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.)3. 堆存放所有new出来的对象.4. ...
一周排行
  • 利用SQLserver2005的DAC关掉高CPU利用率的进程
    参考教材:benet2.0数据库管理在管理SQL数据库时,可能会有T-SQL语句执行错误, ...
  • 今天刚刚爆出Bash安全漏洞,Bash存在一个安全的漏洞,该漏洞直接影响基于Unix的系统(如Linux.OS X 等).该漏洞将导致远程攻击者在受影响的系统上执行任意代码.[已确认被成功利用的软件及系统]  所有安 ...
  • LAMP架构搭建与优化(1.7-1.9)
    vim /usr/local/apache2/conf/httpd.conf (主配置文件 ...
  • 一.所需要软件二.安装过程    1.Ganglia运行平台的安装    2.Ganglia依赖库的安装    3.RRDTool的安装    4.Ganglia的安装 (包括使用yum方式安装)三.简单配置四.启动 ...
  • 华章IT图书书讯2011年第8期
    C#程序设计语言(原书第4版)C#之父最新著作,提供了C# 4.0语言完整的规格说明.参考 ...
  • copy自http://demojava.iteye.com/blog/800204以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组 ...
  • 今天,发现存放数据库的磁盘100G全部占满,环境为windows+sql server 2005!检查一下数据库,发现DB40数据库的ldf文件为40多G,mdf文件为40多G,因为之前一直没关注sql数据库是如何配 ...
  • 转一篇Xcode中利用target编译不同版本的文章
    http://www.cocoachina.com/ios/20160331/15832. ...
  • [摘要]团队建设是项目经理的重要工作,而越来越多的虚拟团队在项目中出现.项目经理如何管理虚拟团队呢?首先让我们对虚拟团队有一个全面的认识,进而能够开展对虚拟团队的管理工作.[正文]PMI针对项目经理论述了八种关键的人 ...
  •                     苏州旅游必去之处寒山寺    山寺始建于公元502年的梁天监年间.到了二百年后的唐代,相传唐时僧人寒山曾在该寺居住,故改名为"寒山寺".这座寺庙,历经数代, ...