数据类型转换分为俩种 。

数据库字段_如何转换成Java 数据库类型转换_字符串

 

隐式数据类型转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。

 

对于直接赋值转换: 

数据库字段_如何转换成Java 数据库类型转换_数据_02

 

 对于表达式赋值:

数据库字段_如何转换成Java 数据库类型转换_SQL_03

 

 

  隐式转换的问题:

性能影响:

隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描。当表的数据量很大的时候,产生会很大的性能问题。比如说,VARCHAR2 和 NVARCHAR2 隐式数据类型转换导致的性能问题。

 

不便于阅读:

由于隐式转换使得数据库编程人员和 DBA 难以了解到究竟发生了怎样的类型转换,而且如果代码很多很长的话要查出错误就需要费很大的劲。

 

显示数据类型转换:通过数据库中的转换函数完成数据类型的转换。

数据库字段_如何转换成Java 数据库类型转换_数据库字段_如何转换成Java_04

 

数字,日期转换成字符:

TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。
arg1:数字或者日期类型。需要转换的数据。
fmt:转换格式

数据库字段_如何转换成Java 数据库类型转换_字符串_05

数据库字段_如何转换成Java 数据库类型转换_SQL_06

数据库字段_如何转换成Java 数据库类型转换_数据库字段_如何转换成Java_07

数据库字段_如何转换成Java 数据库类型转换_SQL_08

SQL> select to_char(sysdate,'month') from dual;
TO_CHAR(SYSDATE,'MONTH')
------------------------
7月

SQL> select to_char(sysdate,'dd') from dual;
TO_CHAR(SYSDATE,'DD')
---------------------
31

SQL> select to_char(sysdate,'day') from dual;
TO_CHAR(SYSDATE,'DAY')
----------------------
星期三

SQL> select to_char(sysdate,'dy') from dual;
TO_CHAR(SYSDATE,'DY')
---------------------
星期三

SQL> select to_char(sysdate,'yyyy') from dual;
TO_CHAR(SYSDATE,'YYYY')
-----------------------
2019

SQL> select to_char(sysdate,'year') from dual;
TO_CHAR(SYSDATE,'YEAR')
------------------------------------------
twenty nineteen

SQL> select to_char(sysdate,'mm') from dual;
TO_CHAR(SYSDATE,'MM')
---------------------
07

SQL> select to_char(sysdate,'cc') from dual;
TO_CHAR(SYSDATE,'CC')
---------------------
21

SQL> select to_char(sysdate,'scc') from dual;
TO_CHAR(SYSDATE,'SCC')
----------------------
 21

SQL> select to_char(sysdate,'iyyyy') from dual;
TO_CHAR(SYSDATE,'IYYYY')
------------------------
20199

SQL> select to_char(sysdate,'iyy') from dual;
TO_CHAR(SYSDATE,'IYY')
----------------------
019

SQL> select to_char(sysdate,'bc') from dual;
TO_CHAR(SYSDATE,'BC')
---------------------
公元

SQL> select to_char(sysdate,'q') from dual;
TO_CHAR(SYSDATE,'Q')
--------------------
3

SQL> select to_char(sysdate,'am') from dual;
TO_CHAR(SYSDATE,'AM')
---------------------
下午

SQL> select to_char(sysdate,'hh') from dual;
TO_CHAR(SYSDATE,'HH')
---------------------
02

SQL> select to_char(sysdate,'hh12') from dual;
TO_CHAR(SYSDATE,'HH12')
-----------------------
02

SQL> select to_char(sysdate,'hh24') from dual;
TO_CHAR(SYSDATE,'HH24')
-----------------------
14

SQL> select to_char(sysdate,'mi') from dual;
TO_CHAR(SYSDATE,'MI')
---------------------
32

SQL> select to_char(sysdate,'mi:ss') from dual;
TO_CHAR(SYSDATE,'MI:SS')
------------------------
32:39

 

SQL> select to_char(sysdate,'ddspth') from dual;
TO_CHAR(SYSDATE,'DDSPTH')
-------------------------
thirty-first

 

数据库字段_如何转换成Java 数据库类型转换_数据库字段_如何转换成Java_09

 

示例:显示所有雇员的名字和受雇日期,受雇日期以 2007 年 8 月 10 日 12:00:00AM 显示。

SQL> select last_name,salary,to_char(hire_date,'yyyy"年 "mm"月 "dd"日" hh:mi:ss am') from employees where salary<5000;
LAST_NAME                     SALARY TO_CHAR(HIRE_DATE,'YYYY"年"MM"
------------------------- ---------- ------------------------------
Austin                       4800.00 2005年 06月 25日 12:00:00 上午
Pataballa                    4800.00 2006年 02月 05日 12:00:00 上午
Lorentz                      4200.00 2007年 02月 07日 12:00:00 上午
Khoo                         3100.00 2003年 05月 18日 12:00:00 上午
Baida                        2900.00 2005年 12月 24日 12:00:00 上午
Tobias                       2800.00 2005年 07月 24日 12:00:00 上午
Himuro                       2600.00 2006年 11月 15日 12:00:00 上午
Colmenares                   2500.00 2007年 08月 10日 12:00:00 上午

 

数字转换:

数据库字段_如何转换成Java 数据库类型转换_数据_10

FM:代表去掉返回结果中的前后空格。

SQL> select to_char(123687.146,'999,999.999') from dual;
TO_CHAR(123687.146,'999,999.99
------------------------------
 123,687.146

SQL> select to_char(123687.1464,'999,999.999') from dual;
TO_CHAR(123687.1464,'999,999.9
------------------------------
 123,687.146

SQL> select to_char(123646487.1464,'999,999.999') from dual;
TO_CHAR(123646487.1464,'999,99
------------------------------
############

SQL> select to_char(646487.1464,'$999,999.999') from dual;
TO_CHAR(646487.1464,'$999,999.
------------------------------
 $646,487.146

SQL> select to_char(646487.1464,'L999,999.999') from dual;
TO_CHAR(646487.1464,'L999,999.
------------------------------
         ¥646,487.146

SQL> select to_char(646487.1464,'l999,999.999') from dual;
TO_CHAR(646487.1464,'L999,999.
------------------------------
         ¥646,487.146

SQL> select to_char(646487.1464,'fml999,999.999') from dual;
TO_CHAR(646487.1464,'FML999,99
------------------------------
¥646,487.146

SQL> select to_char(646487.1464,'fm$999,999.999') from dual;
TO_CHAR(646487.1464,'FM$999,99
------------------------------
$646,487.146

示例:查询雇员 Whalen,显示他的薪水,在薪水前添加美元符号与千位符。

SQL> select last_name,salary,to_char(salary,'fm$999,999.999') from employees where lower(last_name)='whalen';
LAST_NAME                     SALARY TO_CHAR(SALARY,'FM$999,999.999
------------------------- ---------- ------------------------------
Whalen                       4400.00 $4,400.

 

 

to_number  字符串到数字转换
TO_NUMBER(‘arg1’,fmt’):将字符串转换为数值型的格式。带格式化样式 fmt。
arg1:字符串类型。需要转换的数据。
fmt:转换格式

SQL> select to_number('¥440.00','l999,999.999') from dual;
select to_number('¥4400.00','l999,999.999') from dual
ORA-01722: 无效数字

SQL> select to_number('¥440.00','l999,999.999') from dual;
TO_NUMBER('¥440.00','L999,999
-----------------------------
                          440

SQL> 
SQL> select to_number('¥464,400.00','l999,999.999') from dual;
TO_NUMBER('¥464,400.00','L999
-----------------------------
                       464400

 

TO_DATE(‘arg1’,’fmt’):将字符串转换为日期格式。带格式化样式 fmt。
arg1:字符串类型。需要转换的数据。
fmt:转换格式

SQL> select to_date('2019/02/16','yyyy-mm-dd') from dual;
TO_DATE('2019/02/16','YYYY-MM-
------------------------------
2019/2/16

SQL> select to_date('20190216','yyyy-mm-dd') from dual;
TO_DATE('20190216','YYYY-MM-DD
------------------------------
2019/2/16

示例:将 2019 年 3 月 9 日 11 点 30 分转换为 Date 类型

SQL> select to_date('2019年 3月 9日 11点 30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
TO_DATE('2019年3月9日11点30分'
-------------------------
2019/3/9 11:30:00

注意:空格也是格式,一定要看清楚:

SQL> select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual
ORA-01861: 文字与格式字符串不匹配