11:43:13 SCOTT@vbox88in*SQL>select to_char(123456.78,'999999999.999') FROM DUAL;
TO_CHAR(123456.78,'9999
------------------------
123456.780
当格式化字符串中小数点后面的位数小于要转换的数字的小数点位数时,会进行四舍五入;相反,若不足则会在要转换的数字的小数点后面补零。
12:31:24 SCOTT@vbox88in*SQL>select to_char(999.78,'999,999.9') from dual;
TO_CHAR(99
----------
999.8
如果格式化字符串小数点前面的位数要比待转换的整数位数小时,转换结果将会是乱码:
12:38:21 SCOTT@vbox88in*SQL>select to_char(999.78,'99.9') from dual;
TO_CH
-----
#####
12:41:09 SCOTT@vbox88in*SQL>select to_char(999.78,'L999,999,999.99') from dual;
TO_CHAR(999.78,'L999,999,
-------------------------
¥999.78
再比如我们可以使用字符G和D来代替分号和小数点的作用:
12:48:43 SYS@vbox88in*SQL>select to_char(999.78,'L999G999G999D99') from dual;
TO_CHAR(999.78,'L999G999G
-------------------------
¥999.78
特殊符号G和D的定义可以参考变量nls_numeric_characters:
12:51:37 SYS@vbox88in*SQL>show parameter nls
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_calendar string GREGORIAN
nls_comp string BINARY
nls_currency string ¥
nls_date_format string YYYY-MM-DD HH24:MI:SS
nls_date_language string SIMPLIFIED CHINESE
nls_dual_currency string ¥
nls_iso_currency string CHINA
nls_language string SIMPLIFIED CHINESE
nls_length_semantics string BYTE
nls_nchar_conv_excp string FALSE
nls_numeric_characters string .,
nls_sort string BINARY
nls_territory string CHINA
nls_time_format string HH.MI.SSXFF AM
nls_time_tz_format string HH.MI.SSXFF AM TZR
nls_timestamp_format string yyyy-mm-dd HH24:MI:SSXFF
nls_timestamp_tz_format string yyyy-mm-dd HH24:MI:SSXFF TZR
12:55:36 SYS@vbox88in*SQL>select to_char(999.78,'L000G000G000D00') from dual;
TO_CHAR(999.78,'L000G000G
-------------------------
¥000,000,999.78
字符串转数字时比较简单,我们可以直接转换:
12:58:13 SYS@vbox88in*SQL>select to_number('123.456') from dual;
TO_NUMBER('123.456')
--------------------
123.456
也可以在转换时加入格式化字符串:
13:01:35 SYS@vbox88in*SQL>select to_number('¥123.456','L9999.9999') from dual;
TO_NUMBER('¥123.456','L9999.9999')
-----------------------------------
123.456
13:21:47 SYS@vbox88in*SQL>select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS DAY') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:
--------------------------------
2019-11-15 13:21:48 星期五
13:24:48 SYS@vbox88in*SQL>select to_date('2019-11-15 星期五','YYYY-MM-DD DAY') from dual;
TO_DATE('2019-11-15
-------------------
2019-11-15 00:00:00