转换函数将值从一种数据类型转换为另一种数据类型。通常,函数名的形式遵循从数据类型到数据类型的约定。第一个数据类型是输入数据类型。第二种数据类型是输出数据类型。SQL转换函数有:
- ASCIISTR
- BIN_TO_NUM
- CAST
- CHARTOROWID
- COMPOSE
- CONVERT
- DECOMPOSE
- HEXTORAW
- NUMTODSINTERVAL
- NUMTOYMINTERVAL
- RAWTOHEX
- RAWTONHEX
- ROWIDTOCHAR
- ROWIDTONCHAR
- SCN_TO_TIMESTAMP
- TIMESTAMP_TO_SCN
- TO_BINARY_DOUBLE
- TO_BINARY_FLOAT
- TO_BLOB (bfile)
- TO_BLOB (raw)
- TO_CHAR (bfile|blob)
- TO_CHAR (character)
- TO_CHAR (datetime)
- TO_CHAR (number)
- TO_CLOB (bfile|blob)
- TO_CLOB (character)
- TO_DATE
- TO_DSINTERVAL
- TO_LOB
- TO_MULTI_BYTE
- TO_NCHAR (character)
- TO_NCHAR (datetime)
- TO_NCHAR (number)
- TO_NCLOB
- TO_NUMBER
- TO_SINGLE_BYTE
- TO_TIMESTAMP
- TO_TIMESTAMP_TZ
- TO_YMINTERVAL
- TREAT
- UNISTR
- VALIDATE_CONVERSION
数据类型转换一般分为显式转换和阴式转换。
案例代码:
/*
主题:数据类型转换
作者:AT阿宝哥, [email protected]
日期:2016年9月18日
说明:
注意:
*/
-------------------------------------------------------------------------------
--隐式数据类型转换:varchar2和char统称为字符类型,几乎可以存储所有类型的信息
--数字到字符串
SELECT LENGTH(1234567890) FROM dual;
--日期到字符串
SELECT LENGTH(SYSDATE) FROM dual;
-------------------------------------------------------------------------------
--隐式数据类型转换:字符串到数字,表示数字的字符串必须是有效的数字
SELECT mod('11',2) FROM dual;
SELECT mod('11.123',2) FROM dual;
SELECT mod('11.123.123',2) FROM dual; --转换失败
SELECT mod('$11',2) FROM dual; --转换失败
-------------------------------------------------------------------------------
--隐式数据类型转换:字符串到日期,表示日期的字符串必须是如下格式[D|DD]分隔符[MON|MONTH]分隔符[R|RR|YY|YYYY],其中,R和RR分别表示1位或者2位数字的年。
--另外,分隔符可以是大多数标点符号、空格和制表符。
SELECT add_months('10-9月-16' , 1) FROM dual;
SELECT add_months('1\9月/16' , 1) FROM dual;
SELECT add_months('1/9月/16' , 1) FROM dual;
SELECT add_months('1*9月*16' , 1) FROM dual;
SELECT add_months('1 9月 16' , 1) FROM dual;--空格
SELECT add_months('1$9月$16' , 1) FROM dual;--空格
-------------------------------------------------------------------------------
--显式数据类型转换:TO_CHAR将数字转换为字符
SELECT TO_CHAR(00001) FROM dual;--只使用第一个强制参数num
SELECT TO_CHAR(00001,'0999999') FROM dual;--使用第二个参数format,并使用零
SELECT TO_CHAR(00001,'0999999.00') FROM dual;--使用小数点的位置
SELECT TO_CHAR(00001,'0999999D00') FROM dual;--小数分隔符的位置(默认是半角句点)
SELECT TO_CHAR(00001,'0999999,00') FROM dual;--逗号的位置
SELECT TO_CHAR(00001,'0999999G00') FROM dual;--组分隔符的位置
SELECT TO_CHAR(00001,'$0999999') FROM dual;--美元符号
SELECT TO_CHAR(00001,'L0999999') FROM dual;--当地货币符号
SELECT TO_CHAR(-3040,'999999MI') FROM dual;--负数的减号位置
SELECT TO_CHAR(-3040,'999999PR') FROM dual;--包围在括号内的负数
SELECT TO_CHAR(3.1415,'99.999EEEE') FROM dual;--科学计数法
SELECT TO_CHAR(100,'9999V99') FROM dual;--乘以10n次,V后面9的数量表示10的次方
SELECT TO_CHAR(3040,'S999999') FROM dual;--前面加上+或者-
-------------------------------------------------------------------------------
--显式数据类型转换:TO_CHAR将日期转换为字符
SELECT TO_CHAR(SYSDATE) || ' is a good day! ' FROM dual;
SELECT to_char(SYSDATE , 'yyyy-mm-dd') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Y') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YYY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YYYY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'RR') FROM dual;--两位数字表示的年(已知世纪)
SELECT TO_CHAR(SYSDATE ,'CC') FROM dual;--世纪
SELECT TO_CHAR(SYSDATE ,'Year') FROM dual;
SELECT TO_CHAR(SYSDATE ,'year') FROM dual;
SELECT TO_CHAR(SYSDATE ,'YEAR') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MM') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MON') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Mon') FROM dual;
SELECT TO_CHAR(SYSDATE ,'mon') FROM dual;
SELECT TO_CHAR(SYSDATE ,'MONTH') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Month') FROM dual;
SELECT TO_CHAR(SYSDATE ,'month') FROM dual;
SELECT TO_CHAR(SYSDATE ,'D') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DD') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DDD') FROM dual;--年的日
SELECT TO_CHAR(SYSDATE ,'dy') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'Dy') FROM dual;
SELECT TO_CHAR(SYSDATE ,'day') FROM dual;--区分大小写并用英语表示的星期,但是中文系统中不支持
SELECT TO_CHAR(SYSDATE ,'Day') FROM dual;
SELECT TO_CHAR(SYSDATE ,'DAY') FROM dual;
SELECT TO_CHAR(SYSDATE ,'W') FROM dual;--月的周数
SELECT TO_CHAR(SYSDATE ,'WW') FROM dual;--年的周数
SELECT TO_CHAR(SYSDATE ,'Q') FROM dual;--年的季度数
SELECT TO_CHAR(SYSDATE ,'AM') FROM dual;--子午线指示器
SELECT TO_CHAR(SYSDATE ,'PM') FROM dual;
SELECT TO_CHAR(SYSDATE ,'HH') FROM dual;--小时
SELECT TO_CHAR(SYSDATE ,'MI') FROM dual;--分钟
SELECT TO_CHAR(SYSDATE ,'SS') FROM dual;--秒数
SELECT TO_CHAR(SYSDATE ,'SSSSS') FROM dual;--午夜之后的秒数
--实际案例
select TO_Char(hiredate,'YYYY-MM-DD') from emp;
-------------------------------------------------------------------------------
--显式数据类型转换:TO_DATE将字符串转换成日期
SELECT TO_DATE('2009', 'YYYY') FROM dual;
SELECT TO_DATE('8月-2016', 'MON-YYYY') FROM dual;
SELECT TO_DATE('01-8月-2016', 'DD-MON-YYYY') FROM dual;
SELECT TO_DATE('01-8月-2016 18:03:45', 'DD-MON-YYYY HH24:MI:SS') FROM dual;
-------------------------------------------------------------------------------
--显式数据类型转换:TO_NUMBER将字符串转换成日期
SELECT TO_NUMBER(NULL) FROM dual;
SELECT TO_NUMBER('100.00', '9G999D99') FROM dual;
SELECT TO_NUMBER('$1,000.55', '$999,999.99') FROM dual;
SELECT TO_NUMBER('¥1,000.55', 'L999,999.99') FROM dual;
-------------------------------------------------------------------------------