ORACLE常⽤函数——转换函数------------------------------------------类型转换函数----------------------------------------------
--⾃动类型转换, ORACLE 可以⾃动根据具体情况进⾏如下转换:
*字符串到数值
*字符串到⽇期
*数值到字符串
*⽇期到字符串
EX:
--*字符串到数值
SELECT'3.14159'+20FROM DUAL;
SELECT'3.1T'+20FROM DUAL; --报错:⽆效数字,即字符串必须能转换为数值类型才能进⾏操作--*数值到字符串
SELECT'100'||124FROM DUAL;
--1: TO_CHAR(DATE,'FORMAT')
把对应的数据转换为字符串类型
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SAL) FROM SCOTT.EMP;
SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;
Y或YY或YYY 年的最后⼀位,两位或三位
SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;
SYEAR或YEAR SYEAR使公元前的年份前加⼀负号
SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL; --TWENTY ELEVEN
Q 季度,1~3⽉为第⼀季度
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 2表⽰第⼆季度
MM ⽉份数
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; --04表⽰4⽉
RM ⽉份的罗马表⽰
SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL; --IV表⽰4⽉
Month⽤9个字符长度表⽰的⽉份名
SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL; -- 4⽉
WW 当年第⼏周
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- 24表⽰2002年6⽉13⽇为第24周
W 本⽉第⼏周
SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL; -- 2011年04⽉26⽇为第4周
DDD 当年第⼏天. 1⽉1⽇为001,2⽉1⽇为032
SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;
DD 当⽉第⼏天
SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;
D 周内第⼏天
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;
DY 周内第⼏天缩写
SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;
HH或HH12 12进制⼩时数
SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;
HH24 24⼩时制
SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;
MI 分钟数(0~59)
SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
提⽰注意不要将MM格式⽤于分钟(分钟应该使⽤MI)。MM是⽤于⽉份的格式,将它⽤于分钟也能⼯作,但结果是错误的。
SS 秒数(0~59)
SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;
--2: TO_DATE(STRING,'FORMAT')
将字符串转化为ORACLE中的⼀个⽇期
SELECT TO_DATE('2011-03-24', 'YYYY/MM/DD') FROM DUAL; --格式化后依然为 2011-3-24,很是纳闷,⾃⼰查资料解决这个问题SELECT TO_DATE('2011/03/24', 'YYYY-MM-DD') FROM DUAL;
--3: TO_NUMBER
将给出的字符转换为数字
SELECT TO_NUMBER('2008') AS Year FROM DUAL;
--4: RUNC(for number)
按照指定的精度截取⼀个数
TRUNC函数返回处理后的数值,其⼯作机制与ROUND函数极为类似,只是该函数不对指定⼩数前或后的部分做相应舍⼊选择处理,⽽统统截去。
其具体的语法格式如下
TRUNC(number[,decimals])
其中:
number待做截取处理的数值
decimals 指明需保留⼩数点后⾯的位数。可选项,忽略它则截去所有的⼩数部分
SELECT TRUNC(314.14159234, -2) AS FirstNumber, TRUNC(314.14159234,2) FROM DUAL;
--5: CHARTOROWID
把包含外部格式的ROWID的CHAR或VARCHAR2数值转换为内部的⼆进制格式.参数string必须是包含外部格式的ROWID的18字符的字符串.
oracle7和 oracle8中的外部格式是不同的.CHARTOROWID是ROWIDTOCHAR的反函数.
SELECT ROWID, CHARTOROWID('adcddfADGEDGJGFRYJ'), ENAME FROM SCOTT.EMP;
--6: ROWIDTOCHAR
将ROWID数据类型转换为字符类型
将ROWID类型的数值rowid转换为其外部的18字符的字符串表⽰,在oracle7和oracle8之间有些不⼀样的地⽅. ROWIDTOCHAR和CHARTOROWID是两个相反的函数.
SELECT ROWID, ROWIDTOCHAR(ROWID), ENAME FROM SCOTT.EMP
--7: CONVERT(c,dset,sset)
将源字符串 sset从⼀个语⾔字符集转换到另⼀个⽬的dset字符集
oracle decimal类型SELECT CONVERT('? ê í ó ? A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;
--8:HEXTORAW
将⼀个⼗六进制构成的字符串转换raw
SELECT HEXTORAW('324') FROM DUAL;
--9: RAWTOHEX
将RAW类数值rawvalue转换为⼀个相应的⼗六进制表⽰的字符串. rawvalue中的每个字节都被转换为⼀个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.
SELECT RAWTOHEX('11') FROM DUAL;
--10: TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符
即将指定字符转换为全⾓并返回char类型字串
SELECT TO_MULTI_BYTE('ABC abc 中华') FROM DUAL;
SELECT TO_MULTI_BYTE('AFDB') FROM DUAL;
--11: DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回⼀个VARCHAR2类型的值
dump是个功能⾮常强悍的函数,对于深⼊了解oracle存储的⼈⽽⾔相当有⽤。所以对于我们这些仅仅只是应⽤的⼈⽽⾔就不知道能将其应⽤于何处了。此处仅介绍⽤法,不对其功能做深⼊分析。
如上所⽰,dump拥有不少参数。其本质是以指定格式,返回指定长度的exp的内部表⽰形式的varchar2值。fmt含4种格
式:8||10||16||17,分别表⽰8进制,10进制,16进制和单字符,默认为10进制。
start参数表⽰开始位置,length表⽰以,分隔的字串数。
例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;
--12: EMPTY_BLOB()
这两个函数都是⽤来对⼤数据类型字段进⾏初始化操作的函数
--13: EMPTY_CLOB()
-----------------------------------------------------------------------------------------------------------
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论