数据库Oracle 数字,字符,日期之间的相互转换
数据类型转换分为俩种 。

隐式数据类型转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。
对于直接赋值转换:

对于表达式赋值:

隐式转换的问题:
性能影响:
隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描。当表的数据量很大的时候,产生会很大的性能问题。比如说,VARCHAR2 和 NVARCHAR2 隐式数据类型转换导致的性能问题。
不便于阅读:
由于隐式转换使得数据库编程人员和 DBA 难以了解到究竟发生了怎样的类型转换,而且如果代码很多很长的话要查出错误就需要费很大的劲。
显示数据类型转换:通过数据库中的转换函数完成数据类型的转换。

数字,日期转换成字符:
TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。
arg1:数字或者日期类型。需要转换的数据。
fmt:转换格式。




SQL> select to_char(sysdate,'month') from dual;
TO_CHAR(SYSDATE,'MONTH')
------------------------
7月
SQL> select to_char(sysdate,'dd') from dual;
TO_CHAR(SYSDATE,'DD')
---------------------
31
SQL> select to_char(sysdate,'day') from dual;
TO_CHAR(SYSDATE,'DAY')
----------------------
星期三
SQL> select to_char(sysdate,'dy') from dual;
TO_CHAR(SYSDATE,'DY')
---------------------
星期三
SQL> select to_char(sysdate,'yyyy') from dual;
TO_CHAR(SYSDATE,'YYYY')
-----------------------
2019
SQL> select to_char(sysdate,'year') from dual;
TO_CHAR(SYSDATE,'YEAR')
------------------------------------------
twenty nineteen
SQL> select to_char(sysdate,'mm') from dual;
TO_CHAR(SYSDATE,'MM')
---------------------
07
SQL> select to_char(sysdate,'cc') from dual;
TO_CHAR(SYSDATE,'CC')
---------------------
21
SQL> select to_char(sysdate,'scc') from dual;
TO_CHAR(SYSDATE,'SCC')
----------------------
21
SQL> select to_char(sysdate,'iyyyy') from dual;
TO_CHAR(SYSDATE,'IYYYY')
------------------------
20199
SQL> select to_char(sysdate,'iyy') from dual;
TO_CHAR(SYSDATE,'IYY')
----------------------
019
SQL> select to_char(sysdate,'bc') from dual;
TO_CHAR(SYSDATE,'BC')
---------------------
公元
SQL> select to_char(sysdate,'q') from dual;
TO_CHAR(SYSDATE,'Q')
--------------------
3
SQL> select to_char(sysdate,'am') from dual;
TO_CHAR(SYSDATE,'AM')
---------------------
下午
SQL> select to_char(sysdate,'hh') from dual;
TO_CHAR(SYSDATE,'HH')
---------------------
02
SQL> select to_char(sysdate,'hh12') from dual;
TO_CHAR(SYSDATE,'HH12')
-----------------------
02
SQL> select to_char(sysdate,'hh24') from dual;
TO_CHAR(SYSDATE,'HH24')
-----------------------
14
SQL> select to_char(sysdate,'mi') from dual;
TO_CHAR(SYSDATE,'MI')
---------------------
32
SQL> select to_char(sysdate,'mi:ss') from dual;
TO_CHAR(SYSDATE,'MI:SS')
------------------------
32:39
SQL> select to_char(sysdate,'ddspth') from dual;
TO_CHAR(SYSDATE,'DDSPTH')
-------------------------
thirty-first

示例:显示所有雇员的名字和受雇日期,受雇日期以 2007 年 8 月 10 日 12:00:00AM 显示。
SQL> select last_name,salary,to_char(hire_date,'yyyy"年 "mm"月 "dd"日" hh:mi:ss am') from employees where salary<5000;
LAST_NAME SALARY TO_CHAR(HIRE_DATE,'YYYY"年"MM"
------------------------- ---------- ------------------------------
Austin 4800.00 2005年 06月 25日 12:00:00 上午
Pataballa 4800.00 2006年 02月 05日 12:00:00 上午
Lorentz 4200.00 2007年 02月 07日 12:00:00 上午
Khoo 3100.00 2003年 05月 18日 12:00:00 上午
Baida 2900.00 2005年 12月 24日 12:00:00 上午
Tobias 2800.00 2005年 07月 24日 12:00:00 上午
Himuro 2600.00 2006年 11月 15日 12:00:00 上午
Colmenares 2500.00 2007年 08月 10日 12:00:00 上午
数字转换:

FM:代表去掉返回结果中的前后空格。
SQL> select to_char(123687.146,'999,999.999') from dual;
TO_CHAR(123687.146,'999,999.99
------------------------------
123,687.146
SQL> select to_char(123687.1464,'999,999.999') from dual;
TO_CHAR(123687.1464,'999,999.9
------------------------------
123,687.146
SQL> select to_char(123646487.1464,'999,999.999') from dual;
TO_CHAR(123646487.1464,'999,99
------------------------------
############
SQL> select to_char(646487.1464,'$999,999.999') from dual;
TO_CHAR(646487.1464,'$999,999.
------------------------------
$646,487.146
SQL> select to_char(646487.1464,'L999,999.999') from dual;
TO_CHAR(646487.1464,'L999,999.
------------------------------
¥646,487.146
SQL> select to_char(646487.1464,'l999,999.999') from dual;
TO_CHAR(646487.1464,'L999,999.
------------------------------
¥646,487.146
SQL> select to_char(646487.1464,'fml999,999.999') from dual;
TO_CHAR(646487.1464,'FML999,99
------------------------------
¥646,487.146
SQL> select to_char(646487.1464,'fm$999,999.999') from dual;
TO_CHAR(646487.1464,'FM$999,99
------------------------------
$646,487.146
示例:查询雇员 Whalen,显示他的薪水,在薪水前添加美元符号与千位符。
SQL> select last_name,salary,to_char(salary,'fm$999,999.999') from employees where lower(last_name)='whalen';
LAST_NAME SALARY TO_CHAR(SALARY,'FM$999,999.999
------------------------- ---------- ------------------------------
Whalen 4400.00 $4,400.
to_number 字符串到数字转换
TO_NUMBER(‘arg1’,fmt’):将字符串转换为数值型的格式。带格式化样式 fmt。
arg1:字符串类型。需要转换的数据。
fmt:转换格式。
SQL> select to_number('¥440.00','l999,999.999') from dual;
select to_number('¥4400.00','l999,999.999') from dual
ORA-01722: 无效数字
SQL> select to_number('¥440.00','l999,999.999') from dual;
TO_NUMBER('¥440.00','L999,999
-----------------------------
440
SQL>
SQL> select to_number('¥464,400.00','l999,999.999') from dual;
TO_NUMBER('¥464,400.00','L999
-----------------------------
464400
TO_DATE(‘arg1’,’fmt’):将字符串转换为日期格式。带格式化样式 fmt。
arg1:字符串类型。需要转换的数据。
fmt:转换格式。
SQL> select to_date('2019/02/16','yyyy-mm-dd') from dual;
TO_DATE('2019/02/16','YYYY-MM-
------------------------------
2019/2/16
SQL> select to_date('20190216','yyyy-mm-dd') from dual;
TO_DATE('20190216','YYYY-MM-DD
------------------------------
2019/2/16
示例:将 2019 年 3 月 9 日 11 点 30 分转换为 Date 类型
SQL> select to_date('2019年 3月 9日 11点 30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
TO_DATE('2019年3月9日11点30分'
-------------------------
2019/3/9 11:30:00
注意:空格也是格式,一定要看清楚:
SQL> select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual
ORA-01861: 文字与格式字符串不匹配
数据库Oracle 数字,字符,日期之间的相互转换的更多相关文章
- 字符编码之间的相互转换 UTF8与GBK(转载)
转载自http://www.cnblogs.com/azraelly/archive/2012/06/21/2558360.html UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换 ...
- 【miscellaneous】【C/C++语言】UTF8与GBK字符编码之间的相互转换
UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换 CChineseCode 一 预备知识 1,字符:字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值." ...
- System.currentTimeMillis()与日期之间的相互转换
System.currentTimeMillis()与日期 之间是可以相互转换的,大多数Android开发者都知道 通过 SimpleDateFormat dateformat = new Simpl ...
- Oracle时间戳 与时间之间的相互转换
Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型. Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数 (1)从Unix时间戳记 ...
- c++中string类对象和字符数组之间的相互转换
string类在c++中是一个模板类,位于名字空间std中,注意这里不是string.h,string.h是C字符串头文件. 将string类型转换为字符数组char arr[10];string s ...
- 数据库Oracle数字函数
数字函数不多: ROUND(arg1):四舍五入保留整数. arg1:数字类型.原数字. arg2:整数类型.小数点保留的位数. SQL> select round(1256.564,2) fr ...
- DB2中字符、数字和日期类型之间的转换
DB2中字符.数字和日期类型之间的转换 一般我们在使用DB2或Oracle的过程中,经常会在数字<->字符<->日期三种类 型之间做转换,那么在DB2和Oracle中,他们分别 ...
- oracle之函数-数字,日期,转换,字符串,其他
-----------------------------oracle数据库函数----------------------------------------数学函数***select abs(-1 ...
- 数据库Oracle日期函数
SYSDATE 函数:是一个日期函数,它返回当前数据库服务器的日期和时间. 用日期计算: • 从日期加或者减一个数,结果是一个日期值 • 两个日期相减,得到两个日期之间的天数 ,可以加小时到日期上 S ...
随机推荐
- python面试题2.1:如何实现栈
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 2.1 如何实现栈 [阿里巴巴面试题] 难度系数:⭐⭐⭐ 考察 ...
- React第一次渲染为何容易出现TypeError: Cannot read property 'XX' of undefined
此题可能大家会不屑一顾,哎,错误都给你怼脸上了你还不会嘛,其实大家有没有认真思考过这其中的原因.先上一张错误图,剩余的全靠编.没兴趣看图的老铁们可以拉到最底下直接看结论 错误: 代码: 其次,我再把 ...
- 数据结构之队列and栈总结分析
一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的 ...
- 单元测试JUnit案例
被测试模块 package packagedemo; public class Largest { public int minimal(int [] array1) { int index = 0 ...
- PHP代码安全有必要了解下
攻击者通过构造恶意SQL命令发送到数据库,如果程序未对用户输入的 SQL命令执行判断过滤,那么生成的SQL语句可能会绕过安全性检查,插入其他用于修改后端数据库的语句,并可能执行系统命令,从而对系统造成 ...
- vue根据不同环境进行编译打包
工作中我们在开发过程中,有很多的开发环境,如果我们不进行统一配置,那么我们只能手动进行更改,这样会给我们带来诸多不便,所以我们要配置根据不同的环境来进行编译打包. 先看一下我的项目目录: 在confi ...
- abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 一个ip, 两个域名, 两个ssl, 访问多个不同的项目
在前面一篇中说过, 入了好几个坑. 后来使用了nginx+tomcat配置的方式. 终于成功了. 因为头一次使用nginx, 不知道具体怎么操作, 于是我在操作的时候, 按照以下几个步骤执行的: 导航 ...
- 力扣(LeetCode)二进制间距 个人题解
输入:6 输出:1 解释: 6 的二进制是 0b110 . 示例 4: 输入:8 输出:0 解释: 8 的二进制是 0b1000 . 在 8 的二进制表示中没有连续的 1,所以返回 0 . 提示: 1 ...
- apple平台下的objc的GCD,多线程编程就是优雅自然。
在apple的操作系统平台里,GCD使得多线程编程是那么的优雅自然.在传统的多线程编程中,首先要写线程处理循环:之后还有事件队列,消息队列:还要在线程循环中分离事件解释消息,分派处理:还要考虑线程间是 ...