先建表做一个测试:

CREATE TABLE TT(CHAR2 CHAR(2) , VARC2 VARCHAR2(2)), CHAR2 CHAR(3) ;
INSERT INTO TT VALUES('A','A','A') ;
INSERT INTO TT VALUES('A','A ','A') ;
COMMIT ;

1、CHAR 类型 与 CHAR型 比较,补齐空格。也就是说,CHAR 与 CHAR 类型比较时,不管各自定义的长度是多少,都能等。

SELECT * FROM TT WHERE TT.CHAR2 = TT.CHAR3

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

2、CHAR与字符常量的比较,补齐空格。也就是说,常量后边不用加空格也能匹配CHAR类型,不管CHAR定义的长度是多少。

SELECT * FROM TT WHERE TT.CHAR2 = 'A' ;

SELECT * FROM TT WHERE TT.CHAR3 = 'A' ;
CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A  

3、VARCHAR2 与常量比较,不处理空格,也就是说,如果你的数据中有空格,是找不出来的。如下,只能找到  'A'  的,而找不到  'A '  的。(第二个A后面有一个空格)

SELECT * FROM TT WHERE TT.VARC2 = 'A' ;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A

4、当CHAR类型和VARCHAR2类型比较时,比较时对字段值不作处理,直接比较。 也就是说,如果字符长度不一样,VARCHAR2 需要补齐空格,或者 CHAR 需要去掉空格才能相等。

SELECT * FROM TT WHERE TT.CHAR2 = TT.VARC2;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A ---只找出了相同的列,(有空格的‘A ’查不出来)

5、怎么处理不同表中,根据不同场景所定义的  VARCHAR2 与 CHAR 的匹配呢?

两种方法:

5.1  用RPAD 对 VARCHAR2 补齐长度,以上表为例

SELECT * FROM TT WHERE RPAD(TT.VARC2 ,2 ,' ' )  = TT.CHAR2;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

5.2 用TRIM 函数对 VARCHAR2 和 CHAR 去空格。

SELECT * FROM TT WHERE TRIM(TT.VARC2)  =  TRIM(TT.CHAR2);

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

大家可以根据自己的需求,选择其中一种进行转换。

小TIPS:如果该列建立了索引,则建议使用 VARCHAR2 补齐空格的方法与 CHAR 进行匹配,而不建议使用带函数的索引。

如果不涉及索引,两种方法都可以。

  

ORACLE中关于 char 和 varchar2 的比较的更多相关文章

  1. 数据库中,char 与 varchar2 的区别

    区别1: char 是定长的字符串 varchar2 是变长的字符串 区别2: name char(10)   zhangsan__ 如果实际长度不足10,使用空格补齐   name varchar2 ...

  2. oracle中varchar、varchar2、char和nvarchar的区别

    1.char char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节: char是区分中英文的,中文在 ...

  3. oracle中 char,varchar,varchar2的区别

    区别:      1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符) ...

  4. oracle中char],varchar,varchar2

    VARCHAR.VARCHAR2.CHAR的区别 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储 ...

  5. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  6. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...

  7. Oracle之Char VarChar VarChar2

    Oracle之Char VarChar VarChar2 在Oracle数据库中,字符类型有Char.VarChar和VarChar2三种类型,但不大清楚各自区别在哪儿,平时基本上就是用VarChar ...

  8. ORACLE中的varchar2()与nvarchar2()的讲解

    Oracle中NVARCHAR2和VARCHAR2的区别 [转]NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集 ...

  9. (转)在oracle中varchar和varchar2有什么区别?

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...

随机推荐

  1. OpenShift应用镜像构建(2) - 链式构建

    Openshift对于应用构建提供了三种模式 从应用的源代码构建并部署,Openshift通过一个S2I的构建过程编译打包并实现发布,具体可以参考 https://www.cnblogs.com/er ...

  2. jQuery中,选择器既匹配开头又匹配结尾

    jQuery中,选择器既匹配开头又匹配结尾的方法: [attr^=val]attr$=val [attr^=val][attr$=val]

  3. iOS:quartz2D绘图(显示绘制在PDF上的图片)

    quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来.在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)lo ...

  4. iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)

    前一篇几乎已经详细介绍了Quartz2D的所有知识,这一篇以及后面就不废话了,主要是用具体的实例来演示绘图效果. 这里我们先来绘制一些简单的图形(如直线.三角形.圆.矩形.文字.图像),它有两种方式可 ...

  5. Docker创建centos的LNMP镜像

    前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记. 1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装> ...

  6. XmlRpc with C#/Java【转】

    最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下 ...

  7. metal的gpu query

    https://developer.apple.com/documentation/metal/mtlcommandbuffer/1639924-gpustarttime gpuStartTime 看 ...

  8. stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承

    一.内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮.变暗.渐变颜色等处理十分的方便. lighte ...

  9. Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

    本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...

  10. 阿里巴巴Android开发手册(规约)

    阿里巴巴Android开发手册(规约) 学习了:https://www.cnblogs.com/jb2011/p/8487889.html  这个猛 https://blog.csdn.net/ali ...