万恶之源SQL---强制类型转化(日期转换)

9 篇文章 0 订阅

日期格式转换

很多开发运维人员都会为了字符转日期  日期转字符,日期格式化诸如此类的问题发愁

下面列出一些关于日期转换的例子集合:

以emp表的hiredate(date类型)为例:

SCOTT@ prod>select * from emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00        800                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00        950                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择14行。
SCOTT@ prod>desc emp;
 名称                                                                                                                                                                        是否为空? 类型
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
 EMPNO                                                                                                                                                                         NOT NULL NUMBER(4)
 ENAME                                                                                                                                                                                  VARCHAR2(10)
 JOB                                                                                                                                                                                    VARCHAR2(9)
 MGR                                                                                                                                                                                    NUMBER(4)
 HIREDATE                                                                                                                                                                               DATE
 SAL                                                                                                                                                                                    NUMBER(7,2)
 COMM                                                                                                                                                                                   NUMBER(7,2)
 DEPTNO                                                                                                                                                                                 NUMBER(2)

两种日期表达方式:


SCOTT@ prod>select ename,hiredate, to_char(hiredate, 'DD-MON-YY') month_hired,to_char(hiredate,'FmDdspth "of" Month,Year') dd  from emp;

ENAME                          HIREDATE            MONTH_HIRED                                DD
------------------------------ ------------------- ------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SMITH                          1980-12-17 00:00:00 17-12月-80                                 Seventeenth of 12月,Nineteen Eighty
ALLEN                          1981-02-20 00:00:00 20-2月 -81                                 Twentieth of 2月,Nineteen Eighty-One
WARD                           1981-02-22 00:00:00 22-2月 -81                                 Twenty-Second of 2月,Nineteen Eighty-One
JONES                          1981-04-02 00:00:00 02-4月 -81                                 Second of 4月,Nineteen Eighty-One
MARTIN                         1981-09-28 00:00:00 28-9月 -81                                 Twenty-Eighth of 9月,Nineteen Eighty-One
BLAKE                          1981-05-01 00:00:00 01-5月 -81                                 First of 5月,Nineteen Eighty-One
CLARK                          1981-06-09 00:00:00 09-6月 -81                                 Ninth of 6月,Nineteen Eighty-One
SCOTT                          1987-04-19 00:00:00 19-4月 -87                                 Nineteenth of 4月,Nineteen Eighty-Seven
KING                           1981-11-17 00:00:00 17-11月-81                                 Seventeenth of 11月,Nineteen Eighty-One
TURNER                         1981-09-08 00:00:00 08-9月 -81                                 Eighth of 9月,Nineteen Eighty-One
ADAMS                          1987-05-23 00:00:00 23-5月 -87                                 Twenty-Third of 5月,Nineteen Eighty-Seven
JAMES                          1981-12-03 00:00:00 03-12月-81                                 Third of 12月,Nineteen Eighty-One
FORD                           1981-12-03 00:00:00 03-12月-81                                 Third of 12月,Nineteen Eighty-One
MILLER                         1982-01-23 00:00:00 23-1月 -82                                 Twenty-Third of 1月,Nineteen Eighty-Two

已选择14行。

SCOTT@ prod>

日期是字符类型,转换成想要的日期格式:

2009-10-10 字段是char类型如何转换成目标格式

SCOTT@ prod>create table D_CHAR_T_DAT (Riqi char(30),hirdate number);

表已创建。

SCOTT@ prod>insert into D_CHAR_T_DAT values('2009-10-10',20200102);

已创建 1 行。

SCOTT@ prod>commit;

提交完成。

SCOTT@ prod>select * from D_CHAR_T_DAT;

RIQI                                                                                          HIRDATE
------------------------------------------------------------------------------------------ ----------
2009-10-10                                                                                   20200102

SCOTT@ prod>SELECT TO_CHAR(TO_DATE(Riqi),'FmDdspth "of" Month,Year') , to_date(HIRDATE) from D_CHAR_T_DAT;

TO_CHAR(TO_DATE(RIQI),'FMDDSPTH"OF"MONTH,YEAR')                                                                                                                                                           TO_DATE(HIRDATE)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------
Tenth of 10月,Two Thousand Nine                                                                                                                                                                           2020-01-02 00:00:00

SCOTT@ prod>

上述内容为OCP题库内容

 

下面是转载的内容关于日期处理

获取时间:从上至下  年月日时分秒

SCOTT@ prod>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  from dual;  

TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS')
---------------------------------------------------------
2021-03-30 15:22:26

SCOTT@ prod>select to_char(sysdate,'yyyy')  from dual;                   

TO_CHAR(SYSD
------------
2021

SCOTT@ prod>select to_char(sysdate,'mm')    from dual;                   

TO_CHA
------
03

SCOTT@ prod>select to_char(sysdate,'dd')    from dual;                   

TO_CHA
------
30

SCOTT@ prod>select to_char(sysdate,'hh24')  from dual;                   

TO_CHA
------
15

SCOTT@ prod>select to_char(sysdate,'mi')    from dual;                   

TO_CHA
------
22

SCOTT@ prod>select to_char(sysdate,'ss')    from dual;                   

TO_CHA
------
26

SCOTT@ prod>

求某一天是周几

SCOTT@ prod>select to_char(to_date('2020-08-26','yyyy-mm-dd'),'day') from dual; 

TO_CHAR(TO_DATE('2
------------------
星期三
SCOTT@ prod>select to_char(to_date('2020-08-26','yyyy-mm-dd'),'day', 'NLS_DATE_LANGUAGE = American') from dual;

TO_CHAR(TO_DATE('2020-08-26
---------------------------
wednesday

求两个日期中的天数(除去周6 周日)

SCOTT@ prod>select count(*)    
  2  from ( select rownum-1 rnum    
  3     from all_objects    
  4     where rownum <= to_date('2020-02-28','yyyy-mm-dd') - to_date('2020-    
  5     02-01','yyyy-mm-dd')+1   
  6    )    
  7  where to_char( to_date('2020-02-01','yyyy-mm-dd')+rnum-1, 'D' )    
  8      not in ( '6', '7' ) ;

  COUNT(*)
----------
        20

SCOTT@ prod>

 查找月份

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

SCOTT@ prod>select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;  

    MONTHS
----------
         1

SCOTT@ prod>select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 

    MONTHS
----------
1.03225806

更为详细的日期处理方法:

转载 https://www.jb51.net/article/45591.htm

Jrojyun

2021-03-30

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值