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

文章目录

  • 1 概述
  • 2 显式转换
    • 2.1 to_char
    • 2.2 to_date
    • 2.3 to_number
  • 3 隐式转换

1 概述

数据类型转换
显示:三种转换函数
隐式:系统自动转换

2 显式转换

Oracle 数据类型转换详解(显示 + 隐式)_第1张图片

2.1 to_char

功能:将 '数值类型''日期类型' 转为 '字符类型'
返回值类型:varchar2

特别的:to_char(date, 'FM99999990.00')9 代表:如果存在数字则显示数字,不存在则显示 '空格'0 代表:如果存在数字则显示数字,不存在则显示 0,即 '占位符'
其 FM 代表:格式化数据(会删除因 9 带来的空格)

示例:

select to_char(12.34) c1, -- '12.34'
       to_char(12.34, 'FM99999.0900') fm1, -- 12.3400
       to_char(12.34, 'FM00099.0900') fm2, -- 00012.3400
       to_char(0.34, 'FM99999.0900') fm3, -- .3400 (常犯的错误)
       to_char(0.34, 'FM99990.0900') fm4, -- 0.3400
       
       to_char(sysdate, 'YYYY-MM-DD hh24:mi:ss') d1 -- 当前时间
  from dual;

2.2 to_date

功能:将 '字符型' 转为 '日期型'
返回值类型:date

select to_date('2020-11-11 11:11:11', 'YYYY-MM-DD hh24:mi:ss') d1
  from dual;

2.3 to_number

功能:将 '字符型' 转为 '数值'
返回值类型:number

select to_number('12.34') n1 -- 12.34
  from dual;

3 隐式转换

Oracle 数据类型转换详解(显示 + 隐式)_第2张图片

select ('1' || 1) 字符型, -- 11
       ('1' + 1) 数值型   -- 2
  from dual;

特别的:

1. 对于 insertupdate 操作,隐式转化为 '字段的数据类型'
   -- 也很好理解:表字段类型已固定,若无转换,则直接报错
   若 id 列为 number 类型 -- varchar2 同理 to_char(1)
   update t set id = '1'         
=> update t set id = to_number('1')
     
   insert into t(id) values('1') 
=> insert into t(id) values(to_number('1'))

2. 对于 select 操作
   若 id 列为 number 类型
   select * from t where id = '1'
=> select * from t where id = to_number('1') 

   若 id 列为 varchar2 类型 -- 重点(索引失效 => 函数索引)
   select * from t where id = 1  
=> select * from t where to_number(id) = 1;

你可能感兴趣的:(Oracle,类型转换,to_char,to_date,to_number)