热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle数据库基础06转换函数

和Java语言类似,既然SQL语言中有数据类型,那么就会存在数据类型转换。在某些情况下,Oracle数据库需要使用某种数据类型的数据&#

和Java语言类似,既然SQL语言中有数据类型,那么就会存在数据类型转换。

在某些情况下,Oracle数据库需要使用某种数据类型的数据,而实际提供的却是另一种数据类型,如果Oracle能自动将提供的数据类型转换为期望的数据类型的数据,这就是隐式数据类型转换。

在Oracle中,对于直接赋值,Oracle数据库能够自动将VARCHAR2或CHAR转换到NUMBER和DATE类型,也可以将NUMBER和DATE自动转换到VARCHAR2类型。

隐式数据类型转换,不止可以在上面提到的数据类型之间进行,在另一些数据类型之间也可以进行隐式数据类型转换,比如VARCHAR2可以被隐式地转换可以被隐式地转换成ROWID。

除了隐式数据类型转换,另一种就是使用转换函数,显示的将某种数据类型转换成另外一种数据类型。

SQL语言提供了三种函数,实现从一种数据类型转换到另一种数据类型,它们分别是TO_CHAR、TO_NUMBER和TO_DATE。

1.对日期使用TO_CHAR函数

之前,所有Oracle日期值默认都以DD-MON-RR格式显示,现在用TO_CHAR函数,将日期从默认格式转换为指定格式,其语法格式如下:

TO_CHAR(date[,'fmt'])

在使用该方法时,需要注意:格式模板必须放在单引号中,并且是大小写敏感的,格式模板可以包括任意日期格式元素。

例如:

select to_char(sysdate,'yyyy/mm/dd,hh24-mi-ss') from dual;

结果:

日期格式元素
格式元素说明结果
CC世纪21
YYYYYEAR2013
YYY、YY、Y年的最后三、二、一个数字013、13、3
Y,YYY年,在指定位置到逗号2,013
YEAR拼写年TWENTY THIRTEEN
BC、AD根据日期自动设置为BC、ADAD
B.C根据日期自动设置为BC.ADA.D
Q季度2
MM月:两位数值06
MONTH月份的全拼,右端补齐空格,总长为九个JUNE(右边有五个空格)
Mon月份的前三个字母,首字母大写Jun
RW罗马数字月VI
WW、W在本年或本月的第几周

24、3

DAY周几的全拼,右端补齐空格,总长为九个字符MONDAY
DY周几,前三个字母缩写MON
DDD或DD或D在本年、本月或本周的第几天168、17、2(周日为第一天)

接下来我们看看fm、th和sp三个元素的使用。

fm元素的作用是删除填补的空或者前导0,例如:

执行下面语句:

select to_char(sysdate,'fmyyyy/mm/dd,hh24-mi-ss') from dual;

结果:

th和sp元素的作用是指定后缀来影响数字的显示,th加在数字后面表示序数,sp加在数字后面让数字以英文形式显示,两个元素也可以结合起来使用。

例如

 

格式元素

说明

结果

AM、PM

根据时间自动设置AM或PM

PM

A.M或P.M

根据时间自动设置A.M或P.M

P.M

HH、HH12、HH24

12小时格式(1~12)、12小时格式(1~12)、24小时格式(0~23)

03、03、15

MI

分钟(0~59)

44

SS

秒(0~59)

06

SSSSS

从午夜12点以来经过的秒数

56656

为了达到更好的输出效果,可以在格式模板中直接使用标点符号,作为各元素之间的间隔,还可以在格式模板中增加字符串,增加时需要用双引号括起来。

2.对数字使用TO_CHAR函数

当数字与字符串混用且输出是字符串时,应该使用TO_CHAR函数将数字转换为需要的字符串。

(VARCHAR2),其语法格式如下:

TO_CHAR(number[,'fmt'])

格式元素

说明

输入

举例

结果

9

数字宽度(9的个数决定显示的宽度)

2468

999999

2468(前面有两个空格)

0

显示前导0

099999

002468

$

美元符号

$999999

$2468(前面有两个空格)

L

本地货币符号

L9999

¥2468

.

指定小数点位置

999999.99

2468.00(前面有两个空格)

,

指定逗号位置

999,999

2,468(前面有两个空格)

MI

将负数右边显示负号

-2468

999999MI

2468-(前面有两个空格)

PR

将负数加上括号

9999PR

<2468>

EEEE

科学计数法

99.99999EEEE

-2.46800E&#43;03&#xff08;前面无空格&#xff09;

V

乘n个10&#xff0c;n由V后9的个数决定

999999V99

-246800&#xff08;前面有两个空格&#xff09;

例如&#xff1a;将员工表中雇员工资以美元符号、逗号和小数点进行显示&#xff1a;

select ename,to_number(sal,&#39;$999,99.99&#39;) from emp;

结果&#xff1a;

3.TO_NUMBER函数

在使用SQL语言的数据类型转换过程中&#xff0c;不可能总是向字符类型转换&#xff0c;有时也需要将字符串转换成数字&#xff0c;这时候就需要使用TO_NUMBER函数&#xff0c;其语法格式如下&#xff1a;

TO_NUMBER(char[,&#39;fmt&#39;])

TO_NUMBER函数示例
函数结果
TO_NUMBER(&#39;2468&#39;,&#39;9999&#39;)2468
TO_NUMBER(&#39;2468&#39;,&#39;999&#39;)报错
TO_NUMBER(&#39;2468&#39;,&#39;999999&#39;)2468
TO_NUMBER(&#39;246a&#39;,&#39;9999&#39;)报错
TO_NUMBER(TO_CHAR(SYSDATE,&#39;YYYY&#39;),&#39;9999&#39;)2013

TO_NUMBER(&#39;2468&#39;,&#39;999&#39;)这个函数报错的原因是格式模板是&#39;999&#39;&#xff0c;要求转换后的数字在-999~999范围之间&#xff0c;而对&#39;2468&#39;使用TO_NUMBER函数&#xff0c;其结果是2468&#xff0c;超过了这个范围&#xff0c;所以报错。TO_NUMBER(&#39;246a&#39;,&#39;9999&#39;)这个函数报错的原因是强制对一个不能转换为数字的字符进行转换。

4.TO_DATE函数

在将字符转换为数字时&#xff0c;如果该字符不能转换为数字时会报错&#xff1b;同样的&#xff0c;如果将一个不能转换为日期类型的字符进行强制转换&#xff0c;也会报错。

TO_DATE(char[,&#39;fmt&#39;])

例如&#xff1a;

select to_date(&#39;06 03,2006&#39;,&#39;MM DD,YYYY&#39;) from dual;

结果&#xff1a;


推荐阅读
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
幽人贞吉--幽若涵轩_721
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有