《Oracle Database编程指南》13-05:转换函数(Conversion Functions)

转换函数将值从一种数据类型转换为另一种数据类型。通常,函数名的形式遵循从数据类型到数据类型的约定。第一个数据类型是输入数据类型。第二种数据类型是输出数据类型。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;

-------------------------------------------------------------------------------

发布了28 篇原创文章 · 获赞 28 · 访问量 4552

猜你喜欢

转载自blog.csdn.net/goldentec/article/details/104763517