一、Oracle中的to_date()函数
1、to_date()与24小时制表示法及mm分钟的显示:
在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。
如:select to_date(‘2005-01-01 13:14:20’,’yyyy-MM-dd HH24:mm:ss’) from dual;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。
select to_date(‘2005-01-01 13:14:20’,’yyyy-MM-dd HH24:mi:ss’) from dual;

2、另要以24小时的形式显示出来要用HH24
select to_char(sysdate,’yyyy-MM-dd HH24:mi:ss’) from dual;//mi是分钟
select to_char(sysdate,’yyyy-MM-dd HH24:mm:ss’) from dual;//mm会显示月份

3、实例
日期转换,获取系统当前时间
(1)在Java中的语句:
select to_char(sysdate,’yyyy-MM-dd HH24:mm:ss’)from dual;
输出:2018-05-17 10:05:02
而系统真正的当前时间是2018-05-17 10:54:21,年月日倒是对的,从分钟上出现了偏差。

(2)但是在oracle数据库中,这个mm是取不到当前的分钟数的:
select to_char(sysdate,’yyyy-MM-dd HH24:mi:ss’)from dual; 采用24小时制
输出:2018-05-17 10:54:21
这行仅仅只有一个字母区别的代码,出来的数据有如下的巨大区别。由于这个错误显示的结果极难发现,因为从数据上,几乎看不错差异,但是如果关系到账务的项目,这是一个致命的错误。
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。而正因为mm不区分大小写,所以mm会显示月份,显示05,mi显示分钟,显示54。

(3)select to_char(sysdate,’yyyy-MM-dd HH:mi:ss’)from dual; 采用12小时制
2018-05-17 10:54:21

(4)select to_date(‘2018-05-17 10:54:21’,’yyyy-MM-dd HH24:mi:ss’) from dual;
17-5月 -18

(5)select to_char(sysdate,’Day, HH12:MI:SS’) from dual;
星期四, 11:11:26

select to_char(sysdate,’Day, yyyy-MM-dd HH:mi:ss’) from dual;
星期四, 2018-05-17 11:12:26

select to_char(sysdate,’yyyy-MM-dd Day HH:mi:ss’) from dual;
2018-05-17 星期四 11:13:20

4、oracle中的to_date参数含义
(1)日期格式参数含义说明
D 一周中的星期几
DAY 天的名字,使用空格填充到9个字符
DD 月中的第几天
DDD 年中的第几天
DY 天的简写名
IW ISO标准的年中的第几周
IYYY ISO标准的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最后三位,两位,一位
HH 小时,按12小时计
HH24 小时,按24小时计
MI 分
SS 秒
MM 月
Mon 月份的简写
Month 月份的全名
W 该月的第几个星期
WW 年中的第几个星期

(2)日期时间间隔操作
当前时间减去7分钟的时间
select sysdate,sysdate - interval ’7’ MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval ’7’ hour from dual
当前时间减去7天的时间
select sysdate - interval ’7’ day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval ’7’ month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval ’7’ year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval ’2’ hour from dual

(3)日期到字符操作
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual
参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

(4)字符到日期操作
select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual
具体用法和上面的to_char差不多。

(5)trunk/ ROUND函数的使用
select trunc(sysdate ,’YEAR’) from dual
select trunc(sysdate ) from dual
select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual

(6)oracle有毫秒级的数据类型
–返回当前时间 年月日小时分秒毫秒
select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
–返回当前时间的秒毫秒,可以指定秒后面的精度(最大=9)
select to_char(current_timestamp(9),’MI:SSxFF’) from dual;
参考:https://www.cnblogs.com/fmxyw/archive/2008/08/26/1276850.html

二、Oracle中的to_char()函数
(1)用作日期转换:
to_char(date,’格式’);
select to_date(‘2005-01-01 ‘,’yyyy-MM-dd’) from dual;
select to_char(sysdate,’yyyy-MM-dd HH24:mi:ss’) from dual;

(2)处理数字:
to_char(number,’格式’);
select to_char(88877) from dual;
select to_char(1234567890,’099999999999999’) from dual;
select to_char(12345678,’999,999,999,999’) from dual;
select to_char(123456,’99.999’) from dual;
select to_char(1234567890,’999,999,999,999.9999’) from dual;

(3)to_char(salary,’99,99′);selectTOCHAR(123,′99,99′);selectTOCHAR(123,′99,99’); select TO_CHAR(123,’99,999.9’) from dual;

(4)用于进制转换:将10进制转换为16进制;
select to_char(4567,’xxxx’) from dual;
select to_char(123,’xxx’) from dual;

例子:
to_char() 例子
输入 输出
to_char(-0.1,’99.99’) ’ -.10’
to_char(-0.1,’FM9.99’) ‘-.1’
to_char(0.1,’0.9’) ’ 0.1’
to_char(12,’9990999.9’) ’ 0012.0’
to_char(12,’FM9990999.9’) ‘0012’
to_char(485,’999’) ’ 485’
to_char(-485,’999’) ‘-485’
to_char(485,’9 9 9’) ’ 4 8 5’
to_char(1485,’9,999’) ’ 1,485’
to_char(1485,’9G999’) ’ 1 485’
to_char(148.5,’999.999’) ’ 148.500’
to_char(148.5,’999D999’) ’ 148,500’
to_char(3148.5,’9G999D999’) ’ 3 148,500’
to_char(-485,’999S’) ‘485-’
to_char(-485,’999MI’) ‘485-’
to_char(485,’999MI’) ‘485’
to_char(485,’PL999’) ‘+485’
to_char(485,’SG999’) ‘+485’
to_char(-485,’SG999’) ‘-485’
to_char(-485,’9SG99’) ‘4-85’
to_char(-485,’999PR’) ‘<485>’
to_char(485,’L999’) ‘DM 485
to_char(485,’RN’) ’ CDLXXXV’
to_char(485,’FMRN’) ‘CDLXXXV’
to_char(5.2,’FMRN’) V
to_char(482,’999th’) ’ 482nd’
to_char(485, ‘“Good number:”999’) ‘Good number: 485’
to_char(485.8,‘“Pre-decimal:”999” Post-decimal:” .999’) ‘Pre-decimal: 485 Post-decimal: .800’
to_char(12,’99V999’) ’ 12000’
to_char(12.4,’99V999’) ’ 12400’
to_char(12.45, ‘99V9’) ’ 125’
参考:https://www.cnblogs.com/herizai/p/7059124.html

三、Oracle中的to_number()函数
(1)将char或varchar2类型的string转换为一个number类型的数值:
需要注意的是,被转换的字符串必须符合数值类型格式,如果被转换的字符串不符合数值型格式,Oracle将抛出错误提示;

(2)to_number和to_char恰好是两个相反的函数;
to_number(varchar2 or char,’格式’)
select to_number(‘000012134’) from dual;
select to_number(‘88877’) from dual;

(3)如果数字在格式范围内的话,就是正确的,否则就是错误的;如:
select to_number(‘12345.678′,′12345.678′,′12345.678', '999999.99’) from dual;
select to_number(‘12345.678′,′12345.678′,′12345.678', '999999.999’) from dual;

(4)可以用来实现进制转换;16进制转换为10进制:
select to_number(‘19f’,’xxx’) from dual;
select to_number(‘f’,’xx’) from dual;
参考:https://blog.csdn.net/jiangnan2014/article/details/16921985

Oracle中关于to_date(),to_char(),to_number()函数的用法相关推荐

  1. 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理

    Oracle 中的 TO_DATE 和 TO_CHAR 函数 oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式 说明 显示值 备注 Year(年 ...

  2. Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理

    Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理 Oracle 中的 TO_DATE 和 TO_CHAR 函数 oracle 中 TO_DATE 函数的时间格式,以 2008-0 ...

  3. mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()

    1.group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一 ...

  4. oracle中获取当前时间的函数

    在 Oracle 中,你可以使用 SYSDATE 函数来获取当前时间. 例如: SELECT SYSDATE FROM DUAL; 这会在输出中显示当前时间. 你也可以使用 CURRENT_TIMES ...

  5. oracle中取反_oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 更新时间:2013年06月13日 17:42:05   作者: 本篇文章是对oracle正则表达式regexp_like的用法进行了详细的分析介 ...

  6. Oracle中start with...connect by prior子句用法

    http://www.cnblogs.com/ZHF/archive/2008/09/10/1288101.html Oracle中start with...connect by prior子句用法 ...

  7. JavaScript中常见的字符串操作函数及用法汇总

    转载地址:http://www.jb51.net/article/65358.htm 这篇文章主要介绍了JavaScript中常见的字符串操作函数及用法,实例汇总了javascript常见的字符串转换 ...

  8. Matlab中print, fprint, fscanf, disp函数的用法

    最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法 一.print() 函数可以把函数图 ...

  9. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

最新文章

  1. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
  2. Codeforces Round FF(Div. 2)
  3. Microsoft Exchange 2010 安装配置
  4. java中break和continue的用法例子
  5. C语言 | 结构体指针
  6. (转)C#开发微信门户及应用(5)--用户分组信息管理
  7. EasyUI 验证框使用方法
  8. 盘点一下数据库的误操作都有哪些后悔药?
  9. php 进行http请求,php模拟http请求的两种方式
  10. Unix/Linux环境C编程入门教程(20) 搭建基于Mac的 Xcode 与 QT 开发环境
  11. 【离散数学】数理逻辑 第一章 命题逻辑(1) 命题和联结词
  12. MAC 下的SVN客户端 Versions、SmartSVN、Cornerstone
  13. python主函数_Python main() 函数
  14. 自定义IP在PCIE中使用
  15. java 生成纯色图片_Java设置PPT幻灯片背景——纯色、渐变、图片背景
  16. win7计算机管理无用户账户,win7系统右键没有以管理员身份运行解决方法
  17. 基于cocos-2dx的游戏制作——I wanna save the princess
  18. 【转】CAN总线与CANOPEN协议入门
  19. JESD22-A120C,2022年最新版发布。用于集成电路的有机材料的水汽扩散率以及水溶解度试验方法
  20. 微信网页长按二维码不识别问题

热门文章

  1. 免费图标和 UI 素材大荟萃
  2. 【Shell】从零基础到熟练,自己实践实践应该就精通了,别问我为什么,我也不知道
  3. android sqlite解密,SQlite数据库的加密与解密
  4. 解读 iOS(马甲包) 组件化与路由的本质
  5. SCADA GPRS 通信协议制定
  6. 怎么做轮播图中的小圆点html,JQuery和html+css实现带小圆点和左右按钮的轮播图实例...
  7. 自然线代-阶梯形矩阵四
  8. nginx 多进程 + io多路复用 实现高并发
  9. 我所理解的JVM(六):内存回收
  10. 租房指南:网上租房与中介租房利弊大PK!