TO_CHAR 是把日期或数字转换为字符串
TO_DATE 是把字符串转换为数据库中得日期类型转换函数
TO_NUMBER 将字符转化为数字

 TO_CHAR
使用TO_CHAR函数处理数字
TO_CHAR(number, '格式')
TO_CHAR(salary,’$99,999.99’);
使用TO_CHAR函数处理日期
TO_CHAR(date,’格式’);

 TO_NUMBER
使用TO_NUMBER函数将字符转换为数字
TO_NUMBER(char[, '格式'])

 TO_DATE
使用TO_DATE函数将字符转换为日期
TO_DATE(char[, '格式'])

 数字格式格式
9 代表一个数字
0 强制显示0
$ 放置一个$符
L 放置一个浮动本地货币符
. 显示小数点
, 显示千位指示符

 日期格式
格式控制 描述
YYYY、YYY、YY 分别代表4位、3位、2位的数字年
YEAR 年的拼写
MM 数字月
MONTH 月的全拼
MON 月的缩写
DD 数字日
DAY 星期的全拼
DY 星期的缩写
AM 表示上午或者下午
HH24、HH12 12小时制或24小时制
MI 分钟
SS 秒钟
SP 数字的拼写
TH 数字的序数词

“特殊字符” 假如特殊字符
HH24:MI:SS AM 15:43:20 PM

日期例子:
SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL
SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL
SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL
SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL
SELECT TO_DATE('2006', 'YYYY') FROM DUAL

日期说明:
当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。

同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。

但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,取整到当前月。

注意:
1.在使用Oracle的to_date函数来做日期转换时,可能会直觉地采用“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会显示月份

TO_DATE格式(以时间:2007-11-02   13:45:25为例)

Year:      
       yy two digits 两位年                显示值:07
       yyy three digits 三位年                显示值:007
       yyyy four digits 四位年                显示值:2007

Month:      
       mm    number     两位月              显示值:11
       mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov    
       month spelled out 字符集表示          显示值:11月,若是英文版,显示november

Day:      
       dd    number         当月第几天        显示值:02
       ddd    number         当年第几天        显示值:02
       dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri
       day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday        
       ddspth spelled out, ordinal twelfth

Hour:
             hh    two digits 12小时进制            显示值:01
             hh24 two digits 24小时进制            显示值:13

Minute:
             mi    two digits 60进制                显示值:45

Second:
             ss    two digits 60进制                显示值:25

其它
             Q     digit         季度                  显示值:4
             WW    digit         当年第几周            显示值:44
             W    digit          当月第几周            显示值:1

24小时格式下时间范围为: 0:00:00 - 23:59:59....      
       12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

1. 日期和字符转换函数用法(to_date,to_char)

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串  
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年  
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月  
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日  
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时  
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分  
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')    from dual//

2.      
   select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

3.求某天是星期几      
  select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;      
  星期一      
  select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;      
  monday      
  设置日期语言      
  ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';      
  也可以这样      
  TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4. 两个日期间的天数      
   select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 时间为null的用法      
  select id, active_date from table1      
  UNION      
  select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.月份差  
  a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')      
  那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。      
  所以,当时间需要精确的时候,觉得to_char还是必要的

7. 日期格式冲突问题      
   输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'      
   alter system set NLS_DATE_LANGUAGE = American      
   alter session set NLS_DATE_LANGUAGE = American      
   或者在to_date中写      
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;      
   注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,      
   可查看      
   select * from nls_session_parameters      
   select * from V$NLS_PARAMETERS

8.      
  select count(*)      
  from ( select rownum-1 rnum      
      from all_objects      
      where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-      
      02-01','yyyy-mm-dd')+1      
     )      
  where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )      
       not in ( '1', '7' )

查找2002-02-28至2002-02-01间除星期一和七的天数      
  在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).

9. 查找月份    
   select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;      
   1      
  select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;      
   1.03225806451613

10. Next_day的用法      
   Next_day(date, day)

Monday-Sunday, for format code DAY      
   Mon-Sun, for format code DY      
   1-7, for format code D

11      
  select to_char(sysdate,'hh:mi:ss') TIME from all_objects      
  注意:第一条记录的TIME 与最后一行是一样的      
  可以建立一个函数来处理这个问题      
  create or replace function sys_date return date is      
  begin      
  return sysdate;      
  end;

select to_char(sys_date,'hh:mi:ss') from all_objects;

12.获得小时数      
    extract()找出日期或间隔值的字段值
   SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer      
   SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')      
   -------------------- ---------------------      
   2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')      
   -------------------- -----------------------      
   2003-10-13 19:35:21 19

13.年月日的处理      
  select older_date,      
      newer_date,      
      years,      
      months,      
      abs(      
       trunc(      
        newer_date-      
        add_months( older_date,years*12+months )      
       )      
      ) days

from ( select      
       trunc(months_between( newer_date, older_date )/12) YEARS,      
       mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,      
       newer_date,      
       older_date      
       from (
             select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date      
             from emp
            )      
     )

14.处理月份天数不定的办法      
  select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.找出今年的天数      
  select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方法      
  to_char( last_day( to_date('02'    | | :year,'mmyyyy') ), 'dd' )      
  如果是28就不是闰年

17.yyyy与rrrr的区别      
  'YYYY99 TO_C      
  ------- ----      
  yyyy 99 0099      
  rrrr 99 1999      
  yyyy 01 0001      
  rrrr 01 2001

18.不同时区的处理      
  select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate      
  from dual;

19.5秒钟一个间隔      
  Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')      
  from dual

2002-11-1 9:55:00 35786      
  SSSSS表示5位秒数

20.一年的第几天      
  select TO_CHAR(SYSDATE,'DDD'),sysdate from dual

310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒      
   select      
    Days,      
    A,      
    TRUNC(A*24) Hours,      
    TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,      
    TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,      
    TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds      
   from      
   (      
    select      
    trunc(sysdate) Days,      
    sysdate - trunc(sysdate) A      
    from dual      
  )

select * from tabname      
  order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//      
  floor((date2-date1) /365) 作为年      
  floor((date2-date1, 365) /30) 作为月      
  d(mod(date2-date1, 365), 30)作为日.

23.next_day函数      返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
  next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。      
  1 2 3 4 5 6 7      
  日 一 二 三 四 五 六

---------------------------------------------------------------

select    (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
  日期 返回的是天 然后 转换为ss

24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
  select sysdate S1,
  round(sysdate) S2 ,
  round(sysdate,'year') YEAR,
  round(sysdate,'month') MONTH ,
  round(sysdate,'day') DAY from dual

25,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
  select sysdate S1,                    
    trunc(sysdate) S2,                 //返回当前日期,无时分秒
    trunc(sysdate,'year') YEAR,        //返回当前年的1月1日,无时分秒
    trunc(sysdate,'month') MONTH ,     //返回当前月的1日,无时分秒
    trunc(sysdate,'day') DAY           //返回当前星期的星期天,无时分秒
  from dual

26,返回日期列表中最晚日期
  select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

27.计算时间差
    注:oracle时间差是以天数为单位,所以换算成年月,日

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual        //时间差-年
     select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual        //时间差-月
     select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual             //时间差-天
     select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual         //时间差-时
     select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual    //时间差-分
     select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒

28.更新时间
    注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual        //改变时间-年
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual                                 //改变时间-月
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual            //改变时间-日
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual         //改变时间-时
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual      //改变时间-分
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual   //改变时间-秒

29.查找月的第一天,最后一天
    SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
      Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
      Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
      LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
  FROM dual;

转载自:http://www.douban.com/note/31849478/

转载于:https://blog.51cto.com/bugou/1273086

Oracle to_char() to_date() to_number()函数相关推荐

  1. SQL转换函数to_char/to_date/to_number

    日期型->字符型转换函数to_char(d [,fmt]) 函数to_char(d [,fmt])用于将日期型数值转换为字符串(varchar2类型),其中参数d用于指定日期值,fmt用于指定要 ...

  2. oracle: to_char,to_date

    to_char()将日期转为字符串,  to_date()将字符串转为日期 SELECT TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') FROM DUAL;-- 中文需要用双 ...

  3. Oracle中关于to_date(),to_char(),to_number()函数的用法

    一.Oracle中的to_date()函数 1.to_date()与24小时制表示法及mm分钟的显示: 在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用&quo ...

  4. oracle stdevp函数,SQL Server与oracle两者区别之函数区别

    Oracle和SQL Server的常用函数对比 1.数学函数 ①绝对值 S:select abs(-1) value O:select abs(-1) value from dual ②取整(大) ...

  5. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  6. oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]

    oracle.sqlserver.mysql常用函数对比[to_char.to_number.to_date] oracle   -->    mysql to_char(sysdate,'yy ...

  7. mysql to_number()函数_oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date] (转)...

    oracle --> mysql to_char(sysdate,'yyyy-mm-dd')-->date_format(sysdate(),'%Y-%m-%d'); to_date(sy ...

  8. Oracle to_char格式化函数

    Oracle to_char格式化函数 Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串 ...

  9. oracle之to_date函数

    日期格式参数 含义说明  D 一周中的星期几  DAY 天的名字,使用空格填充到9个字符  DD 月中的第几天    DDD 年中的第几天  DY 天的简写名  IW ISO标准的年中的第几周  IY ...

最新文章

  1. iOS App 连接外设的几种方式
  2. 计算机的网络通信软件的作用,网络协议软件的作用是什么
  3. Android7.0 Rild工作流程
  4. DNS服务器详解--------基础篇
  5. leetcode509. 斐波那契数
  6. html字符实体标签语法,HTML字符实体与文本格式化标签
  7. php数组和列表,【PHP基础】1.1 所有数组函数分类与列表(目前可能不全)
  8. 南充高中计算机老师,2021四川南充教师招聘考试高中信息技术说课稿之《表格的装饰》...
  9. GIS空间分析 栅格数据分析3 可达性分析
  10. Cisco ❀ QinQ技术与VXLAN技术的区别
  11. Java 简易五子棋
  12. 用python做一个随机题目生成器
  13. 隐藏的区别:display:none 和visibility:hidden
  14. 获取指定年份的工作日和节假日后导入Excel
  15. ## matplotlib.pyplot库的知识点之bar函数——绘制条形图
  16. 微耕门禁控制器的刷卡开刷卡关功能
  17. 华中师范大学微型计算机技术,许静芳(华中师范大学计算机学院副教授)_百度百科...
  18. 如何删除百度快照?百度快照是什么?百度快照优化是什么意思?
  19. 优秀原型设计欣赏:交通类App原型制作分享-DiDi
  20. Mybatis面试常问

热门文章

  1. Java是值传递还是引用传递?
  2. 安卓app与阿里云服务器的无线通信(非局域网)
  3. Linux进程编程(PS: exec族函数、system、popen函数)
  4. python组合数据分类_Python 数据可视化:分类特征统计图
  5. 存储过程 not supported yet_让我们来看看+Redis如何存储和计算一亿用户的活跃度
  6. linux 安装程序丢失链接动态库,Linux安装软件过程中提示缺少动态链接库.so的解决方法...
  7. Linux下怎样安装tomcat,Linux下安装Tomcat的步骤是怎样的?
  8. elastic search java_在 Java 应用程序中使用 Elasticsearch
  9. AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
  10. Linux常用的20条运维命令,值得收藏!