SQL转换函数to_char/to_date/to_number
日期型->字符型轉換函數to_char(d [,fmt]) 函數to_char(d [,fmt])用于將日期型數值轉換為字符串(varchar2類型),其中參數d用于指定日期值,fmt用于指定要轉換成的字符串的格式,也稱模式串。如不給出參數fmt則系統會缺省采用與所在語言環境相關的默認格式。模式串中的字母(a~z, A~Z)也稱日期模式符,被保留使用——相當于關鍵字,其中大部分被賦予特定含義,在對日期型數字的轉換/解析過程中這些模式符將被替換成相應的時間域信息,表4-5列出了常用格式符及其含義。
常用日期模式符
格式符 說明 舉例
yyyy 年份 2008
mm 用數字顯示月份 02
dd 在當月中是第幾天 28
day 星期幾 星期五
am / pm 顯示上午/下午 上午
hh / hh12 / hh24 小時 / 12小時制 / 24小時制 2:30 14:30
mi 分鐘 30
ss 秒鐘 46
SELECT EMPNO,HIREDATE,TO_CHAR(HIREDATE),TO_CHAR(HIREDATE,'YYYY-MM-DD') FROM EMP;
EMPNO HIREDATE TO_CHAR(HIREDATE) TO_CHAR(HIREDATE,'YYYY-MM-DD')
7369 1980/12/17 17-DEC-80 1980-12-17
7499 1981/2/20 20-FEB-81 1981-02-20
7521 1981/2/22 22-FEB-81 1981-02-22
7566 1981/4/2 02-APR-81 1981-04-02
7654 1981/9/28 28-SEP-81 1981-09-28
7698 1981/5/1 01-MAY-81 1981-05-01
7782 1981/6/9 09-JUN-81 1981-06-09
7788 1987/4/19 19-APR-87 1987-04-19
7839 1981/11/17 17-NOV-81 1981-11-17
7844 1981/9/8 08-SEP-81 1981-09-08
7876 1987/5/23 23-MAY-87 1987-05-23
7900 1981/12/3 03-DEC-81 1981-12-03
7902 1981/12/3 03-DEC-81 1981-12-03
7934 1982/1/23 23-JAN-82 1982-01-23
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL; --2014-06-14 05:54:50
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH:MI:SS') FROM DUAL; --2014/06/14 05:54:38
SELECT TO_CHAR(SYSDATE,'FMYYYY/MM/DD HH:MI:SS') FROM DUAL; --在模式串開頭使用fm標記以去掉數字前面的零2014/6/14 5:55:56
SELECT TO_CHAR(SYSDATE,'YYYY "YEAR" MM "MONTH" DD "WEEK" DAY AM HH:MI:SS') FROM DUAL --2014 YEAR 06 MONTH 14 WEEK SATURDAY PM 05:59:25 --2014 YEAR 06 MONTH 14 DAY SATURDAY PM 05:59:25 --------語句中輸入的是AM,結果顯示為PM?Oracle會智能判斷應該顯示什么?
字符型->日期型轉換函數to_date(char [,fmt]) 和前面的to_char()函數相對應,函數to_char(char[,fmt])用于將字符串型數值轉換為日期型(DATE類型),其中參數char用于指定匹配于日期數據的字符串,模式串fmt用于指定日期模式、即按照何種模式解析前面的字符串,如不給出參數fmt則會按照當前語言環境相關的默認格式進行解析。例如:
DROP TABLE users;
CREATE TABLE users(name VARCHAR2(20), birth DATE);
INSERT INTO users VALUES('張三', '24-2月-2009');
INSERT INTO users VALUES('張三', to_date('24-2月-2009'));
INSERT INTO users VALUES('李四', to_date('2016-08-30', 'yyyy-mm-dd '));
其中,前兩條INSERT語句完全等價,第一條語句中也是隱含調用了to_date()函數——先將匹配系統默認日期模式的字符串'24-2月-2009'轉換為DATE類型、再執行新數據記錄的插入操作。但如果字符串的格式不匹配則會出錯。
數值型->字符型轉換函數to_char(n [,fmt]) 函數to_char(n [,fmt])可將數字值轉換為VARCHAR2型數據,通常用于數字值的格式化顯示。其中參數n用于指定數字值,參數fmt用于指定轉換成的格式,其性質及用法與前面的日期模式串類似,具體如表4-6所示。
表4-6 數字模式符
格式符 說明
9 代表一位數字,忽略前導的0
0 代表一位數字,強制顯示0(如果位數不足,則用0補齊)
$ 放置一個美圓符$
L 放置一個本地貨幣符
C 放置一個國際貨幣符號
. 小數點
, 千位指示符
SELECT 12345.67, TO_CHAR(12345.67) AS C1, TO_CHAR(12345.67,'$999,999.0000') AS C2, TO_CHAR(12345.67,'$000,000,0000') AS C3 FROM DUAL;
12345.67 C1 C2 C3
12345.67 12345.67 $12,345.6700 $000,001,2346
字符型->數值型轉換函數to_number(char [,fmt]) 與前述的to_char(n [,fmt])相對應,函數to_number(char [,fmt])的功能則是將字符串型數值轉換/解析為數值型(NUMBER類型)。其中參數char用于指定要解析的字符串,參數fmt用于指定按照字符串的格式。如不給出參數fmt則會按照當前語言環境相關的默認格式進行解析。例如:
SELECT to_number('12345.678901') FROM dual;
SELECT to_number('$12,345.6789', '$99,999.0000') FROM dual;
DROP TABLE t1;
CREATE TABLE t1(name VARCHAR2(20), sal NUMBER);
INSERT INTO t1 values('王五', to_number('$12,345.6789', '$99,999.0000'));
SELECT * FROM t1;
總結
以上是生活随笔為你收集整理的SQL转换函数to_char/to_date/to_number的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文献查找地方
- 下一篇: SpringMVC 理论与实用技术(一)