oracle有三种最基本的数据类型,即字符型、数值型、日期型。同时提供类型转换函数

1)to_char

数值、日期->字符型

语法:to_char(num|date,[format

mask],[nls_parameters])

参数:num|date

待转换的数值或者日期

format

mask:可选参数

2)to_date

字符值->日期值 语法:to_date (string,[format mask],[nls_parameters]) 参数:string 待转换的字符值             format mask:可选参数

格式掩码同to_char转换为date时相同。

备注:转换时要根据给定的string设定正确的格式掩码,否则

Ora_01840:input value is not long enough for date format.

Ora_01862:the numeric value does not match the length of the format item.

3) to_number

字符值->数字值 语法:to_number (string,[format mask],[nls_parameters]) 参数:string 待转换的字符值             format mask:可选参数

格式掩码同to_char转换为number时相同。

备注:如果使用较短的格式掩码就会返回错误。

例如: to_number(123.56,’999.9’)返回错误。

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

1) 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。

假如id列的数据类型为number

update t set id='1'; -> 相当于 update t set id=to_number('1');

insert into t(id) values('1') -> insert into t values(to_number('1'));

2) 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。    如假设id列的数据类型为varchar2

select * from t where id=1; -> select * from t where to_number(id)=1;

但如果id列的数据类型为number,则

select * from t where id='1'; -> select * from t where id=to_number('1');(参考下文)

3) 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。

如假设id列的数据类型为number

select * from t where id='1'; -> select * from t where id=to_number('1');

4) 当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。

如假设create_date为字符型,

select * from t where create_date>sysdate; -> select * from t where to_date(create_date)>sysdate;(注意,此时session的nls_date_format需要与字符串格式相符)

假设create_date为date型,

select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t where   create_date>to_date('2006-11-11 11:11:11'); (注意,此时session的nls_date_format需要与字符串格式相符)

5) 如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型。

如假设过程如下定义 p(p_1 number)

exec p('1'); -> exec p(to_number('1')); 6)

赋值时,oracle会把等号右边的数据类型转换为左边的数据类型。

如 var a number a:='1'; - > a:=to_number('1');

7) 用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。

select 1||'2' from dual; -> select to_char(1)||'2' from dual;

8) 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。

如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,

则oracle会将她们都转换为number类型的数据再做比较。

9) 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。

简单总结:

比较时,一般是字符型转换为数值型,字符型转换为日期型

算术运算时,一般把字符型转换为数值型,字符型转换为日期型

连接时(||),一般是把数值型转换为字符型,日期型转换为字符型

赋值、调用函数时,以定义的变量类型为准。

9:表示数字转字符的占位

0:表示占位符 及小数点后面有几位就是几个零

Oracle的转换函数实例展示

--自动类型转换
select 1+'1' from dual;--前面是字符串,会自动转换成date类型
select add_months('1-7月-2017',2) from dual;--to_number   to_char   to_date
select sysdate from dual;
--把日期函数转换成字符串:to_char()
select sysdate,to_char(sysdate) from dual;--自己定义日期的格式
select sysdate,to_char(sysdate,'YYYY-MM-DD HH24:MI:ss') from dual;
select sysdate,to_char(sysdate,'YYYY-MM-DD') from dual;
select sysdate,to_char(sysdate,'HH24:MI:ss') from dual;--将数字转换成字符串:to_char
select 123,to_char(123) from dual;
--9代表占位符,如果位数少于前面的数字,都会显示#
--L代表本地货币符号
select 123,to_char(123,'999') from dual;--to_date 将字符串转换成日期类型
select months_between(sysdate,'2017-12-17') from dual;
--to_date() 必须要指定日期的格式
select months_between(sysdate,to_date('2017-12-17','YYYY-MM-DD')) from dual;--to_number 将字符串转数字  字符串必须只有数字
select '123',to_number('123.000') from dual;--nvl相当于java中的条件运算符      a?b:c
--查询所有员工的姓名,职位,薪水,提成和总工资
select ename,job,sal,comm,sal+comm income from emp;
select ename,job,sal,nvl(comm,o) comm,sal+nvl(comm,0) income from emp;--nvl2:有三个参数,第一个参数为null,返回第三个参数的值,否则返回第二个
select ename,job,sal,comm,nvl2(comm,sal+comm,sal) income from emp;
--两者数据类型一定要一致
select comm,nvl(comm,'无') from;  --如果数据类型不一致,将出现报错现象。--decode 功能类似 switch...case...
--查询所有员工的职位,并且以中文显示
select distinct job from emp;
select decode(job,'CLERK','职员','SALESMAN','销售员','PRESIDENT','不知道',
'MANAGER','经理','ANALYST','分析师') as job   from emp;

Oracle数据类型转换相关推荐

  1. mysql oracle 数据类型转换_Mysql与Oracle之间的数据类型转换

    [转]MYSQL 与 Oracle 之间的数据类型转换

  2. Oracle 数据类型转换详解(显示 + 隐式)

    文章目录 1 概述 2 显式转换 2.1 to_char 2.2 to_date 2.3 to_number 3 隐式转换 1 概述 #mermaid-svg-fwPpwf4wV1eBbxmS .la ...

  3. oracle 强制转类型,Oracle 数据类型转换

    -- Start Oracle 为每种数据类型都提供了相应的函数,一般情况下它们之间的相互转换是非常简单的,Oracle 提供的函数有: CAST 将一种类型转成另一种类型 TO_DATE 将字符串转 ...

  4. oracle 数据类型转换

    1.varchar转为number,用 to_number(列名): select to_number(t.create_user) from 表名 t; 2.number转为varchar,用 to ...

  5. oracle tovarchar2_Oracle 数据类型转换之 varchar2,number,date

    原标题:Oracle 数据类型转换之 varchar2,number,date 大家好: 大家都知道,Oracle SQL 在where子查询中,"=" 关系的两侧,数据类型要一致 ...

  6. Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习

    Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图.序列.索引等对象的导出,oracle完结,后续开启mysql的学习 2022找工作是学历.能力和运气的超强结合体,遇 ...

  7. oracle java数据类型转换函数_Oracle基础——单行函数(类型转换函数)

    零点起飞学Oracle 正版现货 155.4元 (需用券) 去购买 > Oracle基础--单行函数(类型转换函数) 在执行运算的过程中,经常需要把一种数据类型转换成另一种数据类型. 数据转换分 ...

  8. MYSQL 与 Oracle 之间的数据类型转换

    2009-07-21 MYSQL 与 Oracle 之间的数据类型转换 关键字: mysql, oracle, 数据类型, 转换 Table 2-4 Default Data Type Mapping ...

  9. Oracle 语言分类 数据类型 数据类型转换 常用函数 集合操作 子查询

    SQL分类 SQL(Structure Query Language)语言是数据库的核心语言.SQL语言共分为四大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL.1 ...

最新文章

  1. AutoML未来可期,工程师的明天何去何从?
  2. Spark源码分析 – SparkEnv
  3. 分享一道JS前端闭包面试题
  4. 【Core Spring】二、装配beans
  5. wpf 动画_WPF中监视动画进度
  6. DeviceNet 消息类型
  7. python 绘制分形树
  8. mac json工具_工具类封装的思路 | 钉钉群机器人为例
  9. visio中公式太小_串并联管道中调节阀的工作流量特性分析
  10. Linux手动指定ip地址
  11. .net操作读取word中的图像并保存
  12. java高并发多线程架构_《Java高并发编程详解-多线程架构与设计》线程安全与数据同步...
  13. 概率编程语言(Probabilistic Programming Languages)库 —— edward
  14. 用户收货地址h5页面_如何实现H5可视化编辑器的实时预览和真机扫码预览功能?...
  15. 安装photoshop2022mac遇到安装失败错误代码182解决方法
  16. 没有编程基础可以学python_没有任何编程基础可以直接学习python语言吗?学会后能够做什么?...
  17. Servlet chapter 3
  18. 安徽二本大学计算机排名,2018安徽大学排名 安徽有哪些大学
  19. python抠图_最简单的Python抠图图文教程
  20. 【截屏、录屏】工具分享-最简单的工具-QQ

热门文章

  1. Flutter嵌入swift混合开发
  2. 2021-2027中国苹果手表充电器市场现状及未来发展趋势
  3. 网络基础之Content-Disposition
  4. 业界 | 如果技术从业者上岗前也要宣誓,一份给程序员的希波克拉底誓言
  5. Gitbook安装与设置
  6. 第一章 国产MCU雅特力AT32 特有功能 资料介绍
  7. html代码input,HTML oninput用法及代码示例
  8. 认知智能真的来了?且看道翰天琼认知智能三大技术体系!
  9. 问道游戏私人服务器架设+详细搭建教程+外网教程
  10. asp.net ViewBag原理