看完这章你会学到以下内容
- 转换函数有那几种,通常用得最多的是那个?
- 为什么要用转换函数?
- 各自转换的关系,适用条件是什么?
数据类型有三类:数字,字符,日期
对应就用转换它们三种类型的函数 :转换函数!
To_Date 转日期Date 强制转换,里面一定要有'-'才能转换,数字只会出现错误,例如:
![12a77a3075cc7ba3b1468a46ecaca36f.png](https://i-blog.csdnimg.cn/blog_migrate/e96c3040f5eff9538726dd70700842f8.png)
SELECT DATE'2019-01-01' FROM DUAL; --- 强制转换为日期格式
SELECT TO_DATE('2019-01-01','YYYY/MM/DD') FROM DUAL;
SELECT TO_DATE('2019-01-01','YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2019-01-01','YYYYMMDD') FROM DUAL; ---- 错误, 日期转换只有以上两种形式
注意:字符或数字中的年月日必须是日期范围内的值
SELECT TO_DATE('2019-13-08','YYYY-MM-DD'), -- 月份不对
TO_DATE(20190732,'YYYY-MM-DD') -- 天数不对
FROM DUAL;
-- 字符日期中有-或/转化为日期类型必须加-或/
SELECT TO_DATE('2019-07-08','YYYYMMDD'), -- 错误
TO_DATE(20190708,'YYYY-MM-DD') FROM DUAL; --- 成功
![11c2daed19f2597d2882f4b0775c1237.png](https://i-blog.csdnimg.cn/blog_migrate/fb48f12503de51806af1aed2711c1f36.jpeg)
![dfc9320f195e9009285d3bf2553af0a4.png](https://i-blog.csdnimg.cn/blog_migrate/4e0c128e63cc0f9780e3ee11b64ae743.png)
![6c0e8210023a93d9af0d2596f8f8035e.png](https://i-blog.csdnimg.cn/blog_migrate/5bdccecc93fafade853c48d252458578.png)
To_Char() 转换为字符
SELECT TRUNC(TO_DATE(SYSDATE),'Y') FROM DUAL;
SELECT TO_CHAR(DATE'2019-08-30','YYYY'), -- '2019'
TO_CHAR(DATE'2019-08-30','YYYYMM'), -- '201908'
TO_CHAR(DATE'2019-08-30','WW'), -- '35' 第35周
TO_CHAR(DATE'2019-08-30','IW'), -- '35' 第35周(自然周)
TO_CHAR(DATE'2019-08-30','Q'), -- '3' 第3季度
TO_CHAR(DATE'2019-08-30','MM'), -- '08'
TO_CHAR(DATE'2019-08-30','DD'), -- '30'
TO_CHAR(DATE'2019-08-30','D') -- '6' 当周的第几天(星期天为第一天)
FROM DUAL;
![4a9e9d639b339f1ff78a8e2231f13d15.png](https://i-blog.csdnimg.cn/blog_migrate/f2350f937fcfbd86ca782d4adabfbe22.jpeg)
To_Number() 转化为数字
SELECT TRUNC(TO_DATE(SYSDATE),'Y') FROM DUAL;
SELECT TO_CHAR(DATE'2019-08-30','YYYY'), -- '2019'
TO_CHAR(DATE'2019-08-30','YYYYMM'), -- '201908'
TO_CHAR(DATE'2019-08-30','WW'), -- '35' 第35周
TO_CHAR(DATE'2019-08-30','IW'), -- '35' 第35周(自然周)
TO_CHAR(DATE'2019-08-30','Q'), -- '3' 第3季度
TO_CHAR(DATE'2019-08-30','MM'), -- '08'
TO_CHAR(DATE'2019-08-30','DD'), -- '30'
TO_CHAR(DATE'2019-08-30','D') -- '6' 当周的第几天(星期天为第一天)
FROM DUAL;
PS: 日期转数字的话:先转为字符,然后再转发为数字,最后是靠右显示。
![2d597ba36a08fa0194d8916fbb94ba77.png](https://i-blog.csdnimg.cn/blog_migrate/025ab93fdd321dbc5ceddf455b25bbbf.jpeg)