Oracle中字符串大小比较以及数据隐式转化

简介: 首先我们得明白在数据库中单引号是用来字符串引用的,不管是数字还是时间,当你用单引号引用起来之后,数据库就会将他当成字符串来对待。我们先看下面两个语句:select from users where age > 30select from users where age > ’30’其中age字段是varchar格式,全部都是数字,不要问我既然都是数字的为什么不用num类型。

首先我们得明白在数据库中单引号是用来字符串引用的,不管是数字还是时间,当你用单引号引用起来之后,数据库就会将他当成字符串来对待。


我们先看下面两个语句:

select from users where age > 30
select from users where age > ’30’

其中age字段是varchar格式,全部都是数字,不要问我既然都是数字的为什么不用num类型。

当两个语句执行的时候,发现第一个语句能准确的筛选出我们想要的结果,第二个语句虽然也可以执行,但筛选出来的结果中age比30小的也出现了。

这时候我们疑问就来了,按理来说,第二个应该才是正确的写法,为什么第二个反而得不到我们想要的结果,第一个却可以呢?

首先我们先看第一个问题:

select * from users where age > ’30’

当30加上单引号,其实就变成了两个字符串之间比较大小了。

假如有一条age的值为4,当数据库将’4’和’30’来比较大小的时候,第一步会用空格补全位数,实际比较的是’4 ’和’30’,然后从左至右依次比较ascii码大小,4的ascii码是52,3的ascii码是51,所以’4’就比’30’大了,也就出现在我们的筛选结果中了

如果比较的是’3’和’30’,同样的也会先去补全位数,第一位都是3然后比较第二位,第二位空格的ascii码32,0的ascii码是48,因此’3’就比’30’小了,好像没毛病,不过我们得明白其中的道理。

梳理下规则

1.用空格补全字符长度短的一方;
2.从左至右依次比较ascii码的大小

第二个问题:

第二个问题涉及到了数据隐式转换。

在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据以下规则对数据进行隐式转换。

什么意思呢,我们看上面的例子,age为varchar类型时,30为num类型,当我们执行select * from users where age > 30的时候,oracle会把age的数据类型隐式转换为num型,上面的语句其实等同于select * from users where to_number(age) > 30数字类型比较大小,当然就没问题了,所以筛选出的结果就是我们期望看到的了;

当然如果age字段里面有不能to_number的值,例如里面有一条记录age是’二十八’,那么上面的语句就会报错了。


peace~

目录
相关文章
|
12天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
3月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
68 0
|
3月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
12天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
12天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
51 0
|
3月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
50 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
47 0
|
3月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。