数据转换函数to_char

  • to_char:任意类型,可以将数字或字符转换为字符

将字符转换为日期

YYYY:4个数字,年

MM:2个数字,月

DD:2个数字,日

HH:2个小时,12小时制

HH24:2个数字,24小时制

MI:2个数字,分钟

SS:2个数字,秒

YEAR:英文的全拼,很少用哦

MONTH:月全拼,在中文字符集会显示X月,在因为会写英文全拼月份

MON:月简写,在中文字符集会显示X月,在因为会写英文简写月份

DAY:星期几全拼,在中文字符集会显示X月,在因为会写英文全拼星期几

DY:星期几简写,在中文字符集会显示X月,在因为会写英文简写星期几

更详细的日期参数:

时间参数:

1
2
3
4
5
6
--逗号作为字符直接打印用于分割年(延伸也可以理解为一个常量打印的分隔符还是以空格分隔)

SQL> SELECT TO_CHAR(SYSDATE,'Y,YYY-MM-DD HH:MM,SS') FROM DUAL;
TO_CHAR(SYSDATE,'Y,YYY-MM-DDHH
------------------------------
2,024-04-22 10:04,04
1
2
3
4
5
--打印当前时间当前时间是22点所有结果是"PM"下午标识
SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MM,SS AM') FROM DUAL;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2024-04-22 22:04,07 PM
1
2
3
4
5
--午夜零点距离时间戳多少秒
SQL> SELECT TO_CHAR(SYSDATE,'sssss') from DUAL;
TO_CHAR(SYSDATE,'SSSSS')
------------------------
80093
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
--在函数中间加入字符串常量需要使用双引号!!!如下增加了 DATE: 和TIME: 需要双引号引起来
SQL> SELECT TO_CHAR(SYSDATE,'"DATE:" YYYY-MM-DD  "TIME:"HH-MI-SS   ' ) from DUAL;
TO_CHAR(SYSDATE,'"DATE:"YYYY-M
----------------------------------
DATE: 2024-04-22  TIME:10-18-57


--常量字符串使用双引号!!!
SQL> SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"') FROM DUAL;
TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"
--------------------------------
2024年04月22日 

将字符转数字

9:代表数字

0:可以理解为占位符当没有值是用0代替

$:美元货币符号

L:本地货币符号,根据你的字符集自动添加货币符号,如你是英文则转换添加为$,若是中文则转换添加为¥

. : 原样输出表示小数点

,:原样输出表示千位符

注:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
--0占位,9代表任意一个数字
SQL> SELECT TO_CHAR(123.45,'L000,999.99') FROM DUAL;
TO_CHAR(123.45,'L000,999.99')
-----------------------------
          $000,123.45

--最后的.999保留3位小数,当.45不足3位时,补充0          
SQL> SELECT TO_CHAR(123.45,'L000,999.999') FROM DUAL;
TO_CHAR(123.45,'L000,999.999')
------------------------------
          $000,123.450
--FM去除前后的0,顶格显示
SQL> SELECT TO_CHAR(123.45,'FML000,999.999') FROM DUAL;
TO_CHAR(123.45,'FML000,999.999
------------------------------
$000,123.45

--去除货币符号后,前有空格后面补有0
SQL> SELECT TO_CHAR(123.45,'999,999.999') FROM DUAL;
TO_CHAR(123.45,'999,999.999')
-----------------------------
     123.450

--FM删除了前面空格和后面的补充的0,但前面的0是强制占位0无法删除 
SQL> SELECT TO_CHAR(123.45,'FM000,999.999') FROM DUAL;
TO_CHAR(123.45,'FM000,999.999'
------------------------------
000,123.45

----把000占位符改为999,FM前面的空格和后面的补位的0也去掉了
SQL> SELECT TO_CHAR(123.45,'FM999,999.999') FROM DUAL;
TO_CHAR(123.45,'FM999,999.999'
------------------------------
123.45
--FM去除空格和补位的0,$用来补充货币符号
SQL> SELECT TO_CHAR(123.45,'FM$999,999.999') FROM DUAL;
TO_CHAR(123.45,'FM$999,999.999
------------------------------
$123.45
--FM去除空格和补位的0,L用来补充本地货币符号,会自动根据自己的字符集补充!!!
SQL> SELECT TO_CHAR(123.45,'FML999,999.999') FROM DUAL;
TO_CHAR(123.45,'FML999,999.999
------------------------------
$123.45


--打印原表
SQL> select ename,sal,to_char(sal*3,'$999,999,999') from emp;
ENAME            SAL TO_CHAR(SAL*3,'$999,999,999')
---------- --------- -----------------------------
SMITH         800.00        $2,400
ALLEN        1600.00        $4,800
WARD         1250.00        $3,750
JONES        2975.00        $8,925
MARTIN       1250.10        $3,750
BLAKE        2850.00        $8,550
CLARK        2450.00        $7,350
SCOTT        3000.00        $9,000
KING         5000.23       $15,001
TURNER       1500.00        $4,500
ADAMS        1100.00        $3,300
JAMES         950.55        $2,852
FORD         3000.00        $9,000
MILLER       1300.00        $3,900



--员工,姓名,薪水,薪水的3倍需要包含千位符和货币标识
SQL> select ename,sal,to_char(sal*3,'L999,999,999.99') from emp;
ENAME            SAL TO_CHAR(SAL*3,'$999,999,999.99
---------- --------- ------------------------------
SMITH         800.00        $2,400.00
ALLEN        1600.00        $4,800.00
WARD         1250.00        $3,750.00
JONES        2975.00        $8,925.00
MARTIN       1250.10        $3,750.30
BLAKE        2850.00        $8,550.00
CLARK        2450.00        $7,350.00
SCOTT        3000.00        $9,000.00
KING         5000.23       $15,000.69
TURNER       1500.00        $4,500.00
ADAMS        1100.00        $3,300.00
JAMES         950.55        $2,851.65
FORD         3000.00        $9,000.00
MILLER       1300.00        $3,900.00