Oracle Q-quote delimiter Quote(q) 字符串原样输出

简介:       在sql查询中,我们经常需要原样输出字符串,如果字符串中含有大量的单引号、双引号或者特殊字符,那么需要用单引号转义拼接字符串,这样会非常的麻烦。

      在sql查询中,我们经常需要原样输出字符串,如果字符串中含有大量的单引号、双引号或者特殊字符,那么需要用单引号转义拼接字符串,这样会非常的麻烦。 oracle提供了一个Q-quote的表达式来原样输出字符串。

在SQL或者PLSQL中如果要表达一个带有特殊字符的字符串时,通常要用‘’包装起来。但如果字符串本身包含‘或者“这样的字符,那么实现起来有点繁琐。

比如:My Name is ‘Ma Yu Ping’

用SQL实现:

SQL> select ‘My Name Is ”Ma Yu Ping”’ names from dual;

NAMES 
———————————————- 
My Name Is ‘Ma Yu Ping’

SQL> select ‘My Name Is "Ma Yu Ping"’ names from dual;

NAMES 
———————————————- 
My Name Is "Ma Yu Ping"

在Oracle中,single-quote(‘)是一个表示字符串的关键字。所以在字符串中用两个”表示一个实际的单引号字符。所有才会有了上面第一条SQL的’My Name Is ”Ma Yu Ping”’ 。双引号“被识别为一个实际的的字符串,第二条sql中的双引号不用括引。其实Oracle提供了一个Q-quote的表达式,用来简化SQL或PLSQL中字符串的表示。

SQL> select q’[My Name Is "Ma Yu Ping"]‘ names from dual;

NAMES 
———————————————- 
My Name Is "Ma Yu Ping"

SQL> select q’[My Name Is 'Ma Yu Ping']‘ names from dual;

NAMES 
———————————————- 
My Name Is ‘Ma Yu Ping’

语法很简单,必须将要表示的字符串用一对特殊字符括起来,这对字符必须一致。

SQL> select q’[My Name Is 'Ma Yu Ping'|' names from dual; 
ERROR: 
ORA-01756: 引号内的字符串没有正确结束

SQL> select q'|My Name Is 'Ma Yu Ping'|' names from dual;

NAMES 
---------------------------------------------- 
My Name Is 'Ma Yu Ping'

常用简化的写法,比如一个where c='d'的产量表达式的表示方法。

SQL> select 'where c=''d''' from dual; --老的写法

'WHEREC=''D''' 
---------------------- 
where c='d'

SQL> select 'where c='d'' from dual; --原则的写法受’表达式的影响出错 
select 'where c='d'' from dual 
                  * 
第 1 行出现错误: 
ORA-00923: FROM keyword not found where expected

SQL> select q'[where c='d']‘ from dual; --使用q-quote表达式的写法

Q’[WHEREC='D']‘ 
———————- 
where c=’d’


SELECT  Q'[I'm a boy,my name is 'david']'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'(I'm a boy,my name is 'david')'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'{I'm a boy,my name is 'david'}'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'|I'm a boy,my name is 'david'|'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'aI'm a boy,my name is 'david'a'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'2I'm a boy,my name is 'david'2'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'@I'm a boy,my name is 'david'@'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'*I'm a boy,my name is 'david'*'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'#I'm a boy,my name is 'david'#'  FROM  DUAL;  --结果:I'm a boy,my name is 'david'
SELECT  Q'[[@#$%^&*~?/" ']]' FROM  DUAL;   --结果:[@#$%^&*~?/" ']


oracle本身默认的是单引号,但是在大家写存储过程或者写SQL语句时,有时候需要拼SQL或者是SQL的值里需要传入含单引号的值,此时就需要使用两个单引号"''"来进行转义,其实oracle本身提供了这种转换默认单引号为其他标识的方法那就是——"q"

q [Oracle's quote operator]

q'c text-to-be-quoted c' c is a single character (called the quote delimiter). 
With the ?quote operator? apostrophes don't have to
 be doubled: 
 
SQL> select q'#Oracle's quote operator#' from dual;
Q'#ORACLE'SQUOTEOPERATO
-----------------------
Oracle's quote operator
 
 






About Me

...............................................................................................................................

本文整理自网络

本文在itpubhttp://blog.itpub.net/26736162)、博客园http://www.cnblogs.com/lhrbest和个人微信公众号(xiaomaimiaolhr)上有同步更新

本文pdf小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ群:230161599     微信群:私聊

联系我请加QQ好友(642808185),注明添加缘由

文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

 img_e3029f287d989cd04bd75432ecc1c172.png  DBA笔试面试讲解

目录
相关文章
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
53 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何遍历字符串
Oracle之如何遍历字符串
45 1
|
1月前
|
SQL Oracle 关系型数据库
Oracle insert数据时字符串中有‘单引号问题
Oracle insert数据时字符串中有‘单引号问题
|
2月前
|
Oracle 关系型数据库
Oracle查询优化-在字符串删除特定字符
【2月更文挑战第4天】【2月更文挑战第8篇】比较灵活,列举三个常见的方式
56 0
|
2月前
|
Oracle 关系型数据库
Oracle查询优化-遍历字符串
【2月更文挑战第3天】【2月更文挑战第6篇】Oracle查询优化-遍历字符串
18 0
|
3月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-按照数字和字母混合字符串中的字母排序
【1月更文挑战第3天】【1月更文挑战第7篇】在对Oracle数据库进行查询优化,尤其是按照数字和字母混合字符串中的字母进行排序时,可以使用多种方法来达到预期的结果。
34 0
|
5月前
|
SQL Oracle 关系型数据库
Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹配
Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹配
|
Oracle 关系型数据库 数据处理
通过Oracle识别字符串中的中文or字母or数字来介绍全角半角转换函数(to_multi_byte/to_single_byte)在varchar/clob中的使用案例
在日常处理数据的过程中,大家肯定会遇到很多奇奇怪怪的字符,然后还要对这些字符处理,比如***你有个需求:识别字符串中的中文或是识别字母或是识别数字,甚至都识别出来然后剔除or保留某些字符汉字或数字***。 你去百度了一下相关问题,然后得到的结果大都是用正则 '\4E00' and '\9FA5'来识别中文范围用a-zA-z或0-9或[:digit:][:alpha:]来识别字母或数字。但是如果你的字符串中包含全角字符,那这样是识别不全的!!!那怎么做才能够正确的识别中文、字母、数字呢???那就要考虑先做全半
通过Oracle识别字符串中的中文or字母or数字来介绍全角半角转换函数(to_multi_byte/to_single_byte)在varchar/clob中的使用案例
Zp
|
Oracle 关系型数据库
Oracle 判断某个字段是否包含某个字符或字符串
Oracle 判断某个字段是否包含某个字符或字符串
Zp
1642 0
|
SQL Oracle 关系型数据库
oracle在sql中判断字段值是数字还是字符串
oracle在sql中判断字段值是数字还是字符串