天天看點

對比mysql學習oracle函數(四):oracle單行函數—轉換函數

1、單行函數分類:一行記錄,傳回一行結果;

對比mysql學習oracle函數(四):oracle單行函數—轉換函數

四種轉換、三個函數:

對比mysql學習oracle函數(四):oracle單行函數—轉換函數

2、to_char(date,‘fmt’):将一個date日期,轉換為’fmt’日期格式的字元串顯示。

1)常見的日期格式控制符

對比mysql學習oracle函數(四):oracle單行函數—轉換函數
對比mysql學習oracle函數(四):oracle單行函數—轉換函數

2)資料源如下

對比mysql學習oracle函數(四):oracle單行函數—轉換函數

3)案例如下

① 查詢1987年入職的員工(姓名,入職日期)。

SQL> select ename,hiredate 
  2  from emp
  3  where to_char(hiredate,'YYYY')='1987';
 
ENAME      HIREDATE
---------- -----------
SCOTT      1987/4/19
ADAMS      1987/5/23           

複制

② 查詢1981年2月入職的員工(姓名,入職日期)。

SQL> select ename,hiredate
  2  from emp
  3  where to_char(hiredate,'YYYY-mm')='1981-02';
 
ENAME      HIREDATE
---------- -----------
ALLEN      1981/2/20
WARD       1981/2/22           

複制

  • 這裡需要注意的是,對于月份隻能是2個m,同時後面的篩選條件必須寫成’1981-02’,而不能是’1981-2’。

③ 傳回某個日期是哪一年、哪一月、哪一天、哪個季度。

-- 傳回日期中的年份
SQL> select to_char(sysdate,'yyyy') from dual;
 
TO_CHAR(SYSDATE,'YYYY')
-----------------------
2019
 -- 傳回日期中的月份
SQL> select to_char(sysdate,'mm') from dual;
 
TO_CHAR(SYSDATE,'MM')
---------------------
12
SQL> select to_char(sysdate,'dd') from dual;
 -- 傳回日期中的日
TO_CHAR(SYSDATE,'DD')
---------------------
16
SQL> select to_char(sysdate,'d')-1 from dual;
 -- 傳回日期是星期幾:西方星期天表示周一,是以,這裡減1
TO_CHAR(SYSDATE,'D')-1
----------------------
1
SQL> select to_char(sysdate,'q') from dual;
 -- 傳回日期是第幾個季度
TO_CHAR(SYSDATE,'Q')
--------------------
4           

複制

3、to_number(str,‘fmt’):将某種格式的數值字元str,轉換為數值顯示。

1)常用的轉換符如下

對比mysql學習oracle函數(四):oracle單行函數—轉換函數

2)案例如下

  • 為了防止弄混淆:左側要轉換的數字字元串是什麼格式,右側就使用一緻相同的格式去進行比對。
SQL> select to_number('$123456.123456','$999999.000000') from dual;
 
TO_NUMBER('$123456.123456','$9
------------------------------
                 123456.123456
 
SQL> select to_number('¥123456.123456','L999999.000000') from dual;
 
 TO_NUMBER('¥123456.123456','L
------------------------------
                 123456.123456
SQL> select to_number('$123,456.123456','$999,999.000000') from dual;
 
TO_NUMBER('$123,456.123456','$
------------------------------
                 123456.123456           

複制

  • 當要轉換的數字字元串長短不一,就是用最長的那個數字字元串的比對格式,去進行比對。
SQL> select to_number('$123.123','$999,999.000000') from dual;
 
TO_NUMBER('$123.123','$999,999
------------------------------
                       123.123
 
SQL> select to_number('$123,456.123456','$999,999.000000') from dual;
 
TO_NUMBER('$123,456.123456','$
------------------------------
                 123456.123456           

複制

  • 當要轉換的數字字元串的格式和長度(比對格式的長度隻能比原來數字的長度要長,不管是整數部分,還是小數部分。),與你所寫的比對格式不一緻時,就會報錯。
SQL> select to_number('¥123.123','$999.000') from dual;
 
select to_number('¥123.123','$999.000') from dual
 
ORA-01722: 無效數字
 
SQL> select to_number('$123.123','$999.00') from dual;
 
select to_number('$123.123','$999.00') from dual
 
ORA-01722: 無效數字
 
SQL> select to_number('$123.123','$99.00') from dual;
 
select to_number('$123.123','$99.00') from dual
 
ORA-01722: 無效數字           

複制

4、to_date():把任何不規則的日期格式的字元型資料,轉換為日期型資料。

  • 将不規則的類似于日期格式的字元串資料,轉換為規整的日期格式的資料。
SQL> select to_date('2018-02-10','YYYY-mm-dd') from dual;
 
TO_DATE('2018-02-10','YYYY-MM-
------------------------------
2018/2/10
 
SQL> select to_date('2018.02.10','YYYY.mm.dd') from dual;
 
TO_DATE('2018.02.10','YYYY.MM.
------------------------------
2018/2/10
 
SQL> select to_date('2018.02 10','YYYY.mm dd') from dual;
 
TO_DATE('2018.0210','YYYY.MMDD
------------------------------
2018/2/10           

複制