Oracle转换函数

108 阅读9分钟

Oracle的转换函数

说明:用于将数值从一种数据类型转换为另一种数据类型。 有以下函数:asciistr,bin_to_num,cast,chartorowid,compose,convert,decompose,hextoraw,INTERVAL,rawtonhex,rowidtochar,rowidtonchar,scn_to_timestamp,timestamp_to_scn,to_char,to_clob,to_date,to_lob,to_label,to_multi_byte,to_nchar,to_number,to_single_byte,translate...using,unistr)

/*ASCIISTR

语法:ASCIISTR(s)

功能:9i新增函数,将任意字符集的字符串转变为数据库字符集的ASCII字符串.

结果:\4E2D\56FD*/

select ASCIISTR('中国') V from dual;

/*BIN_TO_NUM

语法:BIN_TO_NUM(expr[,expr]…)

功能:9i新增函数,用于将位向量值转变为实际的数字值.

结果:23*/

select BIN_TO_NUM(1,0,1,1,1) V from dual;

/*CAST

语法:CAST(expr AS type_name)

功能:用于将一个内置数据类型或集合类型转变为另一个内置数据类型或集合类型.可以作用于长度为0的空字段视图建表格之用.

结果:07-3月 -23*/

select cast(SYSDATE AS VARCHAR2(11)) V from dual;

/*CHARTOROWID

语法:CHARTOROWID(string)

功能:将字符数据类型转换为ROWID类型,把包含外部格式的ROWID的CHAR或VARCHAR2数值转换为内部的二进制格式.参数string必须是包含外部格式的ROWID的18字符的字符串.oracle7和oracle8中的外部格式是不同的.CHARTOROWID是ROWIDTOCHAR的反函数.

使用位置:过程性语言和SQL语句.

结果:AAAVREAAEAAAACXAAA AAAVREAAEAAAACXAAA SMITH

AAAVREAAEAAAACXAAB AAAVREAAEAAAACXAAB ALLEN*/

select rowid,rowidtochar(rowid),ename from scott.emp;

/*COMPOSE

语法:COMPOSE(string)

功能:9i新增函数,用于将输入字符串转变为UNICODE字符串值.

结果:ö*/

select COMPOSE('o'||unistr('\0308')) V from dual;

/*CONVERT

语法:CONVERT(string,dest_set[,source_set])

功能:将字符串string从source_set所表示的字符集转换为由dest_set所表示的字符集.如果source_set没有被指定,它缺省的被设置为数据库的字符集.

使用位置:过程性语言和SQL语句.

结果:a?-???*/

select convert('中国','US7ASCII','WE8ISO8859P1') V from dual;

/*DECOMPOSE

语法:DECOMPOSE(string)

功能:9i新增函数,用于分解字符串并返回相应的UNICODE字符串.

结果:?*/

select DECOMPOSE('ö') V from dual;

/*HEXTORAW

语法:HEXTORAW(string)

功能:将string一个十六进制构成的字符串转换为二进制RAW数值. String中的每两个字符表示了结果RAW中的一个字节..HEXTORAW和RAWTOHEX为相反的两个函数.

使用位置:过程性语言和SQL语句.

结果:*/

select HEXTORAW('AB56') V from dual;

/*INTERVAL

语法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]

功能:该数据类型常用来表示一段时间差,注意时间差只精确到年和月. precision为年或月的精确域,有效范围是0到9,默认值为2.*/

SELECT INTERVAL '122' YEAR(3) V FROM DUAL;

SELECT INTERVAL '122' MONTH(3) V FROM DUAL;

SELECT INTERVAL '100' DAY(3) V FROM DUAL;

SELECT INTERVAL '5-3' YEAR TO MONTH+INTERVAL '20' MONTH V FROM DUAL;

/*RAWTONHEX

语法:RAWTONHEX(rawvalue)

功能:9i新增函数,将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.

使用位置:过程性语言和SQL语句.

结果:3744*/

select rawtonhex('7D') from dual;

/*ROWIDTOCHAR

语法:ROWIDTOCHAR(rowid)

功能:9i新增函数,将ROWID类型的数值rowid转换为varchar2的字符串表示,在oracle7和oracle8之间有些不一样的地方. ROWIDTOCHAR和CHARTOROWID是两个相反的函数.

使用位置:过程性语言和SQL语句.*/

/*ROWIDTONCHAR

语法:ROWIDTOCHAR(rowid)

功能:9i新增函数,将ROWID类型的数值rowid转换为Nvarchar2的字符串表示,在oracle7和oracle8之间有些不一样的地方. ROWIDTOCHAR和CHARTOROWID是两个相反的函数.

使用位置:过程性语言和SQL语句.*/

/*SCN_TO_TIMESTAMP

语法:SCN_TO_TIMESTAMP(number)

功能:10g新增函数,根据输入的scn值返回对应的大概日期时间,其中number用于指定scn值.

使用位置:过程性语言和SQL语句.

结果:07-3月 -23 04.02.16.000000000 下午*/

select SCN_TO_TIMESTAMP(17151090395224) V from DUAL;

/*TIMESTAMP_TO_SCN

语法:TIMESTAMP_TO_SCN(timestamp)

功能:10g新增函数,用于根据输入的timestamp返回所对应的scn值,其中timestamp、用于指定日期时间.

使用位置:过程性语言和SQL语句.

结果:17151090395224*/

select TIMESTAMP_TO_SCN(SYSTIMESTAMP) V from DUAL;

/*TO_CHAR

语法1:TO_CHAR(character)

功能1:用于将NCHAR,NVARCHAR2,CLOB,NCLOB数据转变为数据库字符集数据,当用于NCHAR,NVARCHAR2,NCLOB时字符用单引号括起来,前面加上n.

语法2:TO_CHAR(d [,format[,nlsparams]])

功能2:将日期d转换为一个VARCHAR2类型的字符串.format指定日期格式,.如果没有给定format,使用的就是该会话的缺省日期格式.nlsparams指定NLS参数. nlsparams的格式是:“NLS_DATE_LANGUAGE”

使用位置:过程性语言和SQL语句.

语法3:TO_CHAR(labels[,format])

功能3:将MISLABEL的LABEL转换为一个VARCHAR2类型的变量.

使用位置:在trusted数据库的过程性语句和SQL语句.

语法4:TO_CHAR(num[,format[,nlsparams]])

功能4:将NUMBER类型的参数num转换为一个VARCHAR2类型的变量.如果指定了format,那么它会控制这个转换处理.表5-5列除了可以使用的数字格式.如果没有指定format,它会控制这个转换过程.下面列出了可以使用的数字格式.如果没有指定format,那么结果字符串将包含和num中有效位的个数相同的字符. nlsparams用来指定小数点和千分位分隔符和货币符号.可以使用的格式: NLS_NUMERIC_CHARS=”dg”NLS_CURRENCY=”string”

d和g分别表示列小数点和千分位分隔符. String表示了货币的符号.例如,在美国小数点分隔符通常是一个句点(.),分组分隔符通常是一个逗号(,),而千分位符号通常是一个$.

使用位置:过程性语言和SQL语句.*/

select to_char(n'中国') V from dual;

SELECT TO_CHAR(SYSDATE,'D') 周几 FROM DUAL;--1:周日;2:周一;3:周二...6:周五;7:周六

select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') v from dual;

SELECT TO_CHAR(TO_DATE('07-3月-2008'),'fmDdthsp "of" Month,Year') V FROM DUAL;

SELECT TO_CHAR(OPTIME,'Day')||','||TRIM(TO_CHAR(OPTIME,'Month'))||' '||TRIM(TO_CHAR(OPTIME,'DD,YYYY')) last_day FROM OA_JS_VISIT;

SELECT TO_CHAR(OPTIME,'fmDay')||','||TO_CHAR(OPTIME,'fmMonth')||' '||TO_CHAR(OPTIME,'fmDD,YYYY') last_day FROM OA_JS_VISIT;

/*TO_CLOB

语法:TO_CLOB(char)

功能:9i新增函数,将字符串转变为CLOB类型.Char参数使用NCHAR,NVARCHAR2,NCLOB类型,字符串需要单引号括起来,且在前面加上n.*/

select TO_CLOB(n'中国') V from dual;

/*TO_DATE

语法:TO_DATE(String[,format[,nlsparams]])

功能:将符合特定日期格式的字符串转变为date类型. format是一个日期格式字符串.当不指定format的时候,使用该会话的缺省日期格式,需要特别注意的,缺省格式并不适用'2015-03-03'这种形式.*/

select to_date('20130101','yyyymmdd') V from dual;

/*TO_LOB

语法:TO_LOB(long_column)

功能:9i新增函数,将LONG或LONG ROW列的数据转变为相应的LOB类型.但需要注意的是,在单纯的select语句中会报错,如例子所示.

使用位置:过程性语言和SQL语句.*/

select VIEW_NAME,to_lob(text) text from user_views;/*会报错*/

create table temp_liutao nologging as select VIEW_NAME,to_lob(text) text from user_views;/*通过*/

/*TO_LABEL

语法:TO_LABEL(String[,format])

功能:将String转换为一个MLSLABEL类型的变量. String可以是VARCHAR2或者CHAR类型的参数.如果指定了format,那么它就会被用在转换中.如果没有指定format,那么使用缺省的转换格式.

使用位置:过程性语言和SQL语句.*/

/*TO_MULTI_BYTE

语法:TO_MULTI_BYTE(String)

功能:计算所有单字节字符都替位换位等价的多字节字符的String.该函数只有当数据库字符集同时包含多字节和单字节的字符的时候有效.否则,String不会进行任何处理. TO_MULTI_BYTE和TO_SINGLE_BYTE是相反的两个函数.

使用位置:过程性语言和SQL语句.*/

select to_multi_byte('李') v from dual;

/*TO_NCHAR

语法1:TO_NCHAR(char)

功能1:将字符串由数据库字符集转变为民族字符集.

语法2:TO_NCHAR(date,[,fmt[,nls_param]])

功能2:将日期时间值转变为民族字符集.

语法3:TO_NCHAR(number)

功能3:将数字值转变为民族字符集.*/

select TO_NCHAR('高') v from dual;

select TO_NCHAR(sysdate) v from dual;

select TO_NCHAR(10) v from dual;

/*TO_NUMBER

语法:TO_NUMBER(String[,format[,nlsparams]])

功能:将CHAR或者VARCHAR2类型的String转换为一个NUMBER类型的数值.如果指定了format,那么String应该遵循相应的数字格式. Nlsparams的行为方式和TO_CHAR中的完全相同.TO_NUMBER和TO_CHAR是两个相反的函数.

使用位置:过程性语言和SQL语句.*/

select to_number('1999') v from dual;

/*TO_SINGLE_BYTE

语法:TO_SINGLE_BYTE(String )

功能:计算String中所有多字节字符都替换为等价的单字节字符.该函数只有当数据库字符集同时包含多字节和单字节的字符的时候有效.否则,String不会进行任何处理.TO_MULTI_BYTE和TO_SINGLE_BYTE是相反的两个函数.

使用位置:过程性语言和SQL语句.*/

select TO_SINGLE_BYTE('a b c') v from dual;

/*TRANSLATEUSING

语法:TRANSLATE(str1 USING zfj)

功能:将字符串转变为数据库字符集(char_cs)或民族字符集(nchar_cs)*/

select TRANSLATE('中国' using nchar_cs) V from dual;

/*UNISTR

语法:UNISTR(str1)

功能:9i新增函数,输入字符串返回相应的UNICODE字符*/

select UNISTR('\00D6') V from dual;