oracle 类型转换函数
ORACLE和MYSQL一些函数和实现效果的对比替换
ORACLE和MYSQL一些函数和实现效果的对比替换Oracle和MySQL是两种常见的关系型数据库管理系统(RDBMS)。
尽管它们有相似的功能和语法,但在一些函数和实现效果方面存在一些差异。
下面是一些Oracle和MySQL函数及其替换或对比的例子:1.数据类型的转换:- Oracle中使用TO_CHAR、TO_NUMBER、TO_DATE等函数来转换数据类型。
而在MySQL中,可以使用CAST或CONVERT函数来实现类似的功能。
2.字符串函数:- Oracle中的函数SUBSTR、INSTR、CONCAT可以在MySQL中使用相同的名称进行替换。
但是在MySQL中,可以使用CONCAT_WS函数实现更多的字符串连接功能。
- 例如,使用SUBSTR函数来截取字符串,在Oracle中可以这样写:SUBSTR('Hello World', 7, 5);而在MySQL中可以这样写:SUBSTRING('Hello World', 7, 5)。
- 在Oracle中使用INSTR函数来查找字符串的位置,比如INSTR('Hello World', 'Wo');而在MySQL中可以使用LOCATE函数实现相同的功能:LOCATE('Wo', 'Hello World')。
3.日期和时间函数:- Oracle和MySQL都提供了一系列的日期和时间函数,如SYSDATE、CURRENT_TIMESTAMP、ADD_MONTHS、DATE_TRUNC等。
很多函数在两个数据库中名称和用法都相似,但也有一些区别。
- 例如,Oracle中的函数ADD_MONTHS可以用于添加月份,而在MySQL中,可以使用DATE_ADD函数实现相同的功能。
- 另一个例子是,Oracle中的函数DATE_TRUNC可以截取日期,如DATE_TRUNC('MONTH', sysdate);而在MySQL中可以使用DATE_FORMAT函数实现类似的效果:DATE_FORMAT(sysdate, '%Y-%m-01')。
ORACLE常用数值函数、转换函数、字符串函数介绍
ORACLE常用数值函数、转换函数、字符串函数介绍2009年03月11日星期三22:16本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数。
分二类介绍,分别是:著名函数篇-经常用到的函数非著名函数篇-即虽然很少用到,但某些情况下却很实用注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt表示格式。
单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。
(一).数值型函数(Number Functions)数值型函数输入数字型参数并返回数值型的值。
多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。
ACOS, ASIN, ATAN, and A TAN2支持30位小数点。
1、MOD(n1,n2) 返回n1除n2的余数,如果n2=0则返回n1的值。
例如:SELECT MOD(24,5) FROM DUAL;2、ROUND(n1[,n2]) 返回四舍五入小数点右边n2位后n1的值,n2缺省值为0,如果n2为负数就舍入到小数点左边相应的位上(虽然oracle documents上提到n2的值必须为整数,事实上执行时此处的判断并不严谨,即使n2为非整数,它也会自动将n2取整后做处理,但是我文档中其它提到必须为整的地方需要特别注意,如果不为整执行时会报错的)。
例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL;3、TRUNC(n1[,n2] 返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。
oracle转换函数
转换函数转换函数将值从一种数据类型转换为另外一种数据类型。
在Oracle 中常用的转换函数主要有三个:TO_CHAR、TO_DATE 和TO_NUMBER。
1、TO_CHAR() 本函数又可以分三小类,分别是<1>转换字符‐>字符TO_CHAR(c):将nchar,nvarchar2,clob,nclob类型转换为char类型;例如:S ELECT TO_CHAR('AABBCC')FROM d ual;<2>转换时间‐>字符TO_CHAR(d[,fmt]):将指定的时间按照指定格式转换为varchar2类型;例如:S ELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss')FROM d ual;<3>转换数值‐>字符TO_CHAR(n[,fmt]):将指定数值n按照指定格式fmt转换为varchar2类型并返回;例如:S ELECT TO_CHAR(-100,'L99G999D99MI')FROM d ual;2、T O_DATE(c[,fmt[,nls]])将char,nchar,varchar2,nvarchar2转换为日期类型,如果fmt参数不为空,则按照fmt中指定格式进行转换。
注意这里的fmt参数。
如果ftm为'J'则表示按照公元制(J ulian day)转换,c则必须为大于0并小于5373484的正整数。
例如:SELECT TO_DATE(2454336,'J')FROM d ual;SELECT TO_DATE('2007-8-23 23:25:00','yyyy-mm-dd hh24:mi:ss') FROM d ual;3、T O_NUMBER(c[,fmt[,nls]])将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。
oracle中to_number()函数的用法
oracle中to_number()函数的用法Oracle中的to_number()函数是将特定的表达式转换为数字类型的函数。
它的基本语法如下:```to_number(expression, format)```其中,expression是需要转换的表达式,format是指定表达式的格式的可选参数。
如果不提供format参数,则默认为Oracle数字格式模型。
该函数返回转换后的数字类型。
如果无法将表达式转换为数字类型,函数将返回错误。
下面是to_number()函数的一些常见使用场景:1. 将字符串转换为数字类型to_number()函数可以将一个字符串转换为数字类型,例如:```sqlSELECT to_number('100') FROM dual;```该语句将返回数字100。
2. 将带有特定格式的字符串转换为数字类型如果字符串带有特定的格式,可以通过在to_number()函数中指定格式来将其转换为数字类型。
例如:```sqlSELECT to_number('1,000.00', '999,999.99') FROM dual;```该语句将返回数字1000。
3. 将日期类型转换为数字类型to_number()函数还可以将日期类型转换为数字类型。
例如:```sqlSELECT to_number(to_char(sysdate, 'YYYYMMDD')) FROM dual;```该语句将返回当前日期以数字形式表示的结果。
总之,to_number()函数在将字符串或日期类型转换为数字类型方面非常实用,同时也支持指定特定的格式。
使用时需要注意参数类型和格式的正确性,以避免出现错误。
oracleto_char函数将number转成string
oracleto_char函数将number转成string很多数据转换处理操作时,会遇到将0.007007040000转换成0.70%的需求,我们使⽤Oracle 的SQL 函数 to_char可以实现这种转换。
这个函数⽤来将DATE或NUMBER数据类型转换成可显⽰的字符串,格式是to_char(number_type, format_mask)。
格式'999.99',9表⽰对应的某⼀个指定位数的值,如果是值是0则忽略不显⽰,如果指定位数没有值,则以空格表⽰。
格式'0990.990',0表⽰对应的某⼀个指定位数的值,如果是值是0则显⽰为0,如果是没有值也显⽰为0。
格式'FM990.90',FM表⽰将显⽰出来的字符串定位数没有值⽽显⽰的空格清理掉,作⽤和ltrim类似。
复制代码代码如下:SQL> select to_char(12304.560,'999.99') from dual;TO_CHAR(12304.560,'999.99')---------------------------#######SQL> select to_char(104.560,'999.99') from dual;TO_CHAR(104.560,'999.99')-------------------------104.56SQL> select to_char(104.560,'99999.99') from dual;TO_CHAR(104.560,'99999.99')---------------------------104.56SQL> select to_char(104.560,'99999.990') from dual;TO_CHAR(104.560,'99999.990')----------------------------104.560SQL> select to_char(104.560,'0099.990') from dual;TO_CHAR(104.560,'0099.990')---------------------------0104.560复制代码代码如下:SQL>SQL> select to_char(round(0.007007040000, 4) * 100, 'FM99999999990.90') || '%' as aa,2 length(to_char(round(0.007007040000, 4) * 100, 'FM99999999990.90') || '%') as bb3 from dual;AA BB---------------- ----------0.70% 5SQL>SQL> select to_char(round(0.007007040000, 4) * 100, '99999999990.90') || '%' as aa,2 length(to_char(round(0.007007040000, 4) * 100, '99999999990.90') || '%') as bb3 from dual;AA BB---------------- ----------0.70% 16这是to_char将数字转换成字符串的常见操作功能,还有其他⼀些格式,见to_char(numeric)的格式模板。
Oracle数据库中chr()、ascii()、asciistr()、convert()函数的使用
Oracle数据库中chr()、ascii()、asciistr()、convert()函数的使用文档作者: 叶玉虎创建日期: 2016-08-22更新日期: 2016-08-22Version: 1.文档控制更改记录审阅分发人员参考文献一.Oracle数据库中chr()、ascii()、asciistr()、convert()函数的使用在oracle数据库中有很多的转换函数,主要有chr()、ascii()、asciistr()、cast()、chartorowid()、convert()、rowidtochar()、to_char()、to_date()、to_number()等,其中to_char()、to_date()、to_number()是最常见也是最常用的,chr()一般常出现在控制字符串输出的时候。
本文主要总结chr()、ascii()、asciistr()、convert()这四个转换函数:1、chr()chr()函数是将ASCII码转换为字符:ASCII码->字符,ASCII码对应的字符可以参见本文后面的ASCII编码表。
图1:chr()示例2、ascii()ascii()函数是chr()的反函数,它表示将字符转换为ASCII码:字符-> ASCII码。
图2:ascii()示例3、asciistr()asciistr()函数是将字符串转换为ascii字符串,如下图3:图3:asciistr()示例关于asciistr()函数,我在网上看到一篇文章说可以用asciistr()函数来判断一个字符串中是否含有中文字符,我看了其思路,挺有参考价值的,大概是这样的:图4:用asciistr()函数判断一个字符串中是否含有中文字符根据上图4可以看出,如果是中文字符,那么用asciistr()转换以后,其形式是\4E2D这样的,前面有斜杠\,但是并不是所有带有\都是中文字符,因为斜杠\本身用asciistr()转换后,其结果是\005C,也是带有\的,所以对于这个字符要特别注意下。
Oracle中的二进制、八进制、十进制、十六进制相互转换函数
今天在网上看到一篇关于在oracle中对各种进制数进行转换的帖子,觉得不错,也比较全面,几乎涵盖了经常用到的所有转换。
转过来学习一下,也方便以后查询。
========================================================================== ========大家经常遇到进制转换的问题,网上搜到的转换只是部分十进制与其它进制的转换,所以我把自己写的转换函数提供给大家,4种进制共12个转换函数,虽然有的转换直接使用to_char()和to_number()就可以实现,但我还是把它们整理到一起,使用和查找都方便。
部分函数需要先创建type_str_agg类型和f_stragg函数才能使用,这两个对象的代码也附在之后。
CREATE OR REPLACE PACKAGE pkg_number_trans ISFUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2;FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2;END pkg_number_trans;/CREATE OR REPLACE PACKAGE BODY pkg_number_trans ISFUNCTION f_bin_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_bin_to_oct-- 对象描述: 二进制转换八进制-- 输入参数: p_str 二进制字符串-- 返回结果: 八进制字符串-- 测试用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;-- 备注: 需要定义f_stragg函数和type_str_agg类型----------------------------------------------------------------------------------------------------------------------v_return VARCHAR2(4000);v_bin VARCHAR2(4000);BEGINv_bin := substr('00' || p_str, -3 * ceil(length(p_str) / 3));SELECT f_stragg(data1) INTO v_returnFROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))WHEN '000' THEN '0'WHEN '001' THEN '1'WHEN '010' THEN '2'WHEN '011' THEN '3'WHEN '100' THEN '4'WHEN '101' THEN '5'WHEN '110' THEN '6'WHEN '111' THEN '7'END) data1FROM dualCONNECT BY rownum <= length(v_bin) / 3);RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_bin_to_oct;FUNCTION f_bin_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_bin_to_dec-- 对象描述: 二进制转换十进制-- 输入参数: p_str 二进制字符串-- 返回结果: 十进制字符串-- 测试用例: SELECT pkg_number_trans.f_bin_to_dec('11110001010') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT SUM(data1) INTO v_returnFROM (SELECT substr(p_str, rownum, 1) * power(2, length(p_str) - rownum) data1 FROM dualCONNECT BY rownum <= length(p_str));RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_bin_to_dec;FUNCTION f_bin_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_bin_to_hex-- 对象描述: 二进制转换十六进制-- 输入参数: p_str 二进制字符串-- 返回结果: 十六进制字符串-- 测试用例: SELECT pkg_number_trans.f_bin_to_oct('11110001010') FROM dual;-- 备注: 需要定义f_stragg函数和type_str_agg类型---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);v_bin VARCHAR2(4000);BEGINv_bin := substr('000' || p_str, -4 * ceil(length(p_str) / 4));SELECT f_stragg(data1) INTO v_returnFROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 4 + 1, 4))WHEN '0000' THEN '0'WHEN '0001' THEN '1'WHEN '0010' THEN '2'WHEN '0011' THEN '3'WHEN '0100' THEN '4'WHEN '0101' THEN '5'WHEN '0110' THEN '6'WHEN '0111' THEN '7'WHEN '1000' THEN '8'WHEN '1001' THEN '9'WHEN '1010' THEN 'A'WHEN '1011' THEN 'B'WHEN '1100' THEN 'C'WHEN '1101' THEN 'D'WHEN '1110' THEN 'E'WHEN '1111' THEN 'F'END) data1FROM dualCONNECT BY rownum <= length(v_bin) / 4);RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_bin_to_hex;FUNCTION f_oct_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_oct_to_bin-- 对象描述: 八进制转换二进制-- 输入参数: p_str 八进制字符串-- 返回结果: 二进制字符串-- 测试用例: SELECT pkg_number_trans.f_oct_to_bin('3612') FROM dual;-- 备注: 需要定义f_stragg函数和type_str_agg类型---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT to_char(to_number(f_stragg(data1))) INTO v_returnFROM (SELECT (CASE upper(substr(p_str, rownum, 1))WHEN '0' THEN '000'WHEN '1' THEN '001'WHEN '2' THEN '010'WHEN '3' THEN '011'WHEN '4' THEN '100'WHEN '5' THEN '101'WHEN '6' THEN '110'WHEN '7' THEN '111'END) data1FROM dualCONNECT BY rownum <= length(p_str));RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_oct_to_bin;FUNCTION f_oct_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_oct_to_dec-- 对象描述: 八进制转换十进制-- 输入参数: p_str 八进制字符串-- 返回结果: 十进制字符串-- 测试用例: SELECT pkg_number_trans.f_oct_to_dec('3612') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT SUM(data1) INTO v_returnFROM (SELECT substr(p_str, rownum, 1) * power(8, length(p_str) - rownum) data1 FROM dualCONNECT BY rownum <= length(p_str));RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_oct_to_dec;FUNCTION f_oct_to_hex(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_oct_to_bin-- 对象描述: 八进制转换十六进制-- 输入参数: p_str 八进制字符串-- 返回结果: 十六进制字符串-- 测试用例: SELECT pkg_number_trans.f_oct_to_hex('3612') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);v_bin VARCHAR2(4000);BEGINSELECT pkg_number_trans.f_oct_to_bin(p_str) INTO v_bin FROM dual;SELECT pkg_number_trans.f_bin_to_hex(v_bin) INTO v_return FROM dual;RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_oct_to_hex;FUNCTION f_dec_to_bin(p_int IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_dec_to_bin-- 对象描述: 十进制转换二进制-- 输入参数: p_str 十进制字符串-- 返回结果: 二进制字符串-- 测试用例: SELECT pkg_number_trans.f_dec_to_bin('1930') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);v_hex VARCHAR2(4000);BEGINSELECT pkg_number_trans.f_dec_to_hex(p_int) INTO v_hex FROM dual;SELECT pkg_number_trans.f_hex_to_bin(v_hex) INTO v_return FROM dual;RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_dec_to_bin;FUNCTION f_dec_to_oct(p_int IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_dec_to_oct-- 对象描述: 十进制转换八进制-- 输入参数: p_str 十进制字符串-- 返回结果: 八进制字符串-- 测试用例: SELECT pkg_number_trans.f_dec_to_oct('1930') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);v_bin VARCHAR2(4000);BEGINSELECT pkg_number_trans.f_dec_to_bin(p_int) INTO v_bin FROM dual;v_bin := substr('00' || v_bin, -3 * ceil(length(v_bin) / 3));SELECT f_stragg(data1) INTO v_returnFROM (SELECT (CASE upper(substr(v_bin, (rownum - 1) * 3 + 1, 3))WHEN '000' THEN '0'WHEN '001' THEN '1'WHEN '010' THEN '2'WHEN '011' THEN '3'WHEN '100' THEN '4'WHEN '101' THEN '5'WHEN '110' THEN '6'WHEN '111' THEN '7'END) data1FROM dualCONNECT BY rownum <= length(v_bin) / 3);RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_dec_to_oct;FUNCTION f_dec_to_hex(p_int IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_dec_to_oct-- 对象描述: 十进制转换十六进制-- 输入参数: p_str 十进制字符串-- 返回结果: 十六进制字符串-- 测试用例: SELECT pkg_number_trans.f_dec_to_hex('1930') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT upper(TRIM(to_char(p_int,'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'))) INTO v_return FROM dual;RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_dec_to_hex;FUNCTION f_hex_to_bin(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_dec_to_oct-- 对象描述: 十六进制转换二进制-- 输入参数: p_str 十六进制字符串-- 返回结果: 二进制字符串-- 测试用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT to_char(to_number(f_stragg(data1))) INTO v_returnFROM (SELECT (CASE upper(substr(p_str, rownum, 1))WHEN '0' THEN '0000'WHEN '1' THEN '0001'WHEN '2' THEN '0010'WHEN '3' THEN '0011'WHEN '4' THEN '0100'WHEN '5' THEN '0101'WHEN '6' THEN '0110'WHEN '7' THEN '0111'WHEN '8' THEN '1000'WHEN '9' THEN '1001'WHEN 'A' THEN '1010'WHEN 'B' THEN '1011'WHEN 'C' THEN '1100'WHEN 'D' THEN '1101'WHEN 'E' THEN '1110'WHEN 'F' THEN '1111'END) data1FROM dualCONNECT BY rownum <= length(p_str));RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_hex_to_bin;FUNCTION f_hex_to_oct(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_dec_to_oct-- 对象描述: 十六进制转换八进制-- 输入参数: p_str 十六进制字符串-- 返回结果: 八进制字符串-- 测试用例: SELECT pkg_number_trans.f_hex_to_oct('78A') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);v_bin VARCHAR2(4000);BEGINSELECT pkg_number_trans.f_hex_to_bin(p_str) INTO v_bin FROM dual;SELECT pkg_number_trans.f_bin_to_oct(v_bin) INTO v_return FROM dual;RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_hex_to_oct;FUNCTION f_hex_to_dec(p_str IN VARCHAR2) RETURN VARCHAR2 IS---------------------------------------------------------------------------------------------------------------------- -- 对象名称: f_hex_to_dec-- 对象描述: 十六进制转换十进制-- 输入参数: p_str 十六进制字符串-- 返回结果: 十进制字符串-- 测试用例: SELECT pkg_number_trans.f_hex_to_dec('78A') FROM dual;---------------------------------------------------------------------------------------------------------------------- v_return VARCHAR2(4000);BEGINSELECT SUM(data1) INTO v_returnFROM (SELECT (CASE upper(substr(p_str, rownum, 1))WHEN 'A' THEN '10'WHEN 'B' THEN '11'WHEN 'C' THEN '12'WHEN 'D' THEN '13'WHEN 'E' THEN '14'WHEN 'F' THEN '15'ELSE substr(p_str, rownum, 1)END) * power(16, length(p_str) - rownum) data1FROM dualCONNECT BY rownum <= length(p_str));RETURN v_return;EXCEPTIONWHEN OTHERS THENRETURN NULL;END f_hex_to_dec;END pkg_number_trans;/CREATE OR REPLACE TYPE type_str_agg AS OBJECT(total VARCHAR2(4000),STATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg) RETURN NUMBER,MEMBER FUNCTION odciaggregateiterate(SELF IN OUT type_str_agg,VALUE IN VARCHAR2) RETURN NUMBER,MEMBER FUNCTION odciaggregateterminate(SELF IN type_str_agg,returnvalue OUT VARCHAR2,flags IN NUMBER) RETURN NUMBER,MEMBER FUNCTION odciaggregatemerge(SELF IN OUT type_str_agg,ctx2 IN type_str_agg) RETURN NUMBER)/CREATE OR REPLACE TYPE BODY type_str_agg ISSTATIC FUNCTION odciaggregateinitialize(sctx IN OUT type_str_agg) RETURN NUMBER ISBEGINsctx := type_str_agg(NULL);RETURN odciconst.success;END;MEMBER FUNCTION odciaggregateiterate(SELF IN OUT type_str_agg,VALUE IN VARCHAR2) RETURN NUMBER ISBEGINSELF.total := SELF.total || VALUE;RETURN odciconst.success;END;MEMBER FUNCTION odciaggregateterminate(SELF IN type_str_agg,returnvalue OUT VARCHAR2,flags IN NUMBER) RETURN NUMBER ISBEGINreturnvalue := SELF.total;RETURN odciconst.success;END;MEMBER FUNCTION odciaggregatemerge(SELF IN OUT type_str_agg,ctx2 IN type_str_agg) RETURN NUMBER ISBEGINSELF.total := SELF.total || ctx2.total;RETURN odciconst.success;END;END;/CREATE OR REPLACE FUNCTION f_stragg(p_input VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLEAGGREGATE USING type_str_agg;/。
oracle转换函数
Mocha Softw are Co.,Ltd.
客户 质量 团结 创新
2
DECODE
根据值的不同,将 CHAR、VARCH AR2 或 NUMBER转换为几种不同的字符串或 NUMBER 之 一。这是一个功能非常强的if-then-else 函数。
DECOMPSOE
将任意数据类型的串转换为用与输入相同的字符集规范分解后的 Unicode串
TO_DSINTERVAL
将 CHAR、VARCH AR2 或 NVARCH AR2 数据类型的字符串转换为 INTERVAL DAY TO SECOND 类型的字符串
TO_LOB
将 LONG转换为 LOB,作为 insert as select 的一部分
TO_ MULTI_BYTE
TRANSLATE
将串中的字符变换为不同的字符
UNISTR
将串转换为数据库 Unicode字符集中的Unicode 字符
TRANSLATE( string, if, then ):查看 string 中的每个字符,然后检查 if 抗癌字符是否存在。如果存在,就在 if 中标出找到的字符的位置,然后查看 then 中相同的位置。将用 then 中该位置的字符替换string 中相应的字符。
SQL> select TRANSLATE(87654321, 123456789, 'ABCDEFGHI') from dual; TRANSLAT -------HGFEDCBA
DECODE( value, if1, then1, if2, then2, if3, then3,…,else):TRANSLATE 是逐字地替换 ,DECODE 可以看作是逐值的替 换,DECODE 回味某个字段中的每个值在一系 列的 if/then 测试中查找匹 配值。
ORACLE常用函数——转换函数
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 ELEVENQ 季度,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⽇为032SELECT 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)。
ORACLE隐式类型转换
ORACLE隐式类型转换隐式类型转换简介通常ORACLE数据库存在显式类型转换(Explicit Datatype Conversion)和隐式类型转换(Implicit Datatype Conversion)两种类型转换⽅式。
如果进⾏⽐较或运算的两个值的数据类型不同时(源数据的类型与⽬标数据的类型),⽽且此时⼜没有转换函数时,那么ORACLE必须将其中⼀个值进⾏类型转换,使其能够运算。
这就是所谓的隐式类型转换。
其中隐式类型转换是⾃动进⾏的,当然,只有在这种转换是有意义的时候,才会⾃动进⾏。
Data ConversionGenerally an expression cannot contain values of different datatypes. For example, an expression cannot multiply 5 by 10 and then add 'JAMES'. However, Oracle supports both implicit and explicit conversion of values from one datatype to another.关于隐式类型转换,建议翻看官⽅⽂档“Data Type Comparison Rules”章节,下⾯是官⽅⽂档中的隐式类型转换矩阵。
从下⾯这个表格,我们就能对哪些数据类型能进⾏转换⼀⽬了然。
隐式转换的规则:其实隐式类型转换发⽣在很多地⽅,只是我们很多时候没有留意罢了,不打算⼀⼀举例,⾃⾏翻阅官⽅⽂档的介绍,摘抄隐式类型转换的⼀些常见的规则如下:The following rules govern implicit data type conversions:During INSERT and UPDATE operations, Oracle converts the value to the data type of the affected column.During SELECT FROM operations, Oracle converts the data from the column to the type of the target variable.When manipulating numeric values, Oracle usually adjusts precision and scale to allow for maximum capacity. In such cases, the numeric data type resulting from such operations can differ from the numeric data type found in the underlying tables.When comparing a character value with a numeric value, Oracle converts the character data to a numeric value.Conversions between character values or NUMBER values and floating-point number values can be inexact, because thecharacter types and NUMBER use decimal precision to represent the numeric value, and the floating-point numbers use binary precision.When converting a CLOB value into a character data type such as VARCHAR2, or converting BLOB to RAW data, if the data to be converted is larger than the target data type, then the database returns an error.During conversion from a timestamp value to a DATE value, the fractional seconds portion of the timestamp value is truncated.This behavior differs from earlier releases of Oracle Database, when the fractional seconds portion of the timestamp value was rounded.Conversions from BINARY_FLOAT to BINARY_DOUBLE are exact.Conversions from BINARY_DOUBLE to BINARY_FLOAT are inexact if the BINARY_DOUBLE value uses more bits ofprecision that supported by the BINARY_FLOAT.When comparing a character value with a DATE value, Oracle converts the character data to DATE.When you use a SQL function or operator with an argument of a data type other than the one it accepts, Oracle converts theargument to the accepted data type.When making assignments, Oracle converts the value on the right side of the equal sign (=) to the data type of the target of the assignment on the left side.During concatenation operations, Oracle converts from noncharacter data types to CHAR or NCHAR.During arithmetic operations on and comparisons between character and noncharacter data types, Oracle converts from anycharacter data type to a numeric, date, or rowid, as appropriate. In arithmetic operations between CHAR/VARCHAR2 andNCHAR/NVARCHAR2, Oracle converts to a NUMBER.Most SQL character functions are enabled to accept CLOBs as parameters, and Oracle performs implicit conversions betweenCLOB and character types. Therefore, functions that are not yet enabled for CLOBs can accept CLOBs through implicitconversion. In such cases, Oracle converts the CLOBs to CHAR or VARCHAR2 before the function is invoked. If the CLOB is larger than 4000 bytes, then Oracle converts only the first 4000 bytes to CHAR.对上⾯官⽅⽂档资料的翻译如下,如有不对或不够确切的地⽅,敬请指出1. 对于INSERT和UPDATE操作,ORACLE会把插⼊值或者更新值隐式转换为对应字段的数据类型。
oracle convert参数
【主题】Oracle中的Convert参数详解【内容】1. 介绍Oracle中的Convert参数在Oracle数据库中,Convert参数是一个常用的函数,主要用于将一个数据类型转换为另一个数据类型。
通过Convert参数,我们可以在查询过程中对数据类型进行转换,满足不同的需求。
2. Convert参数的语法在Oracle中,Convert参数的语法如下:CONVERT (expression, datatype)其中,expression表示要进行转换的数据,datatype表示要转换成的数据类型。
通过这个语法,我们可以灵活地进行数据类型的转换操作。
3. Convert参数的使用方法使用Convert参数非常简单,只需要在需要进行数据类型转换的地方,将需要转换的数据和目标数据类型作为参数传入即可。
下面是一个简单的示例:SELECT CONVERT('12345', NUMBER) FROM dual;这个示例中,我们将一个字符类型的数据'12345'转换为数字类型。
通过Convert参数,我们可以方便地实现数据类型之间的转换。
4. Convert参数的常见应用场景Convert参数通常用于以下几个常见的应用场景:- 数据类型转换:在数据库查询过程中,有时候需要将一个数据类型转换为另一个数据类型,这时候就可以使用Convert参数来实现。
- 数据格式转换:有时候我们需要对日期、时间等数据进行格式转换,将其转换为特定的格式,这时候也可以使用Convert参数来完成。
- 数据单位转换:在一些业务场景中,可能需要将数据的单位进行转换,比如将温度由摄氏度转换为华氏度,这时候也可以使用Convert参数来实现。
5. Convert参数的注意事项在使用Convert参数时,需要注意以下几点:- 数据类型兼容性:在进行数据类型转换时,需要确保目标数据类型与原数据类型是兼容的,否则可能会出现转换失败的情况。
Oracle数据库chr ascii asciistr convert 函数的使用
Oracle数据库中chr()、ascii()、asciistr()、convert()函数的使用(附ASCII编码表)在oracle数据库中有很多的转换函数,主要有chr()、ascii()、asciistr()、cast()、chartorowid()、convert()、rowidtochar()、to_char()、to_date()、to_number()等,其中to_char()、to_date()、to_number()是最常见也是最常用的,chr()一般常出现在控制字符串输出的时候。
本文主要总结chr()、ascii()、asciistr()、convert()这四个转换函数:1、chr()chr()函数是将ASCII码转换为字符:ASCII码-> 字符,ASCII码对应的字符可以参见本文后面的ASCII 编码表。
图1:chr()示例2、ascii()ascii()函数是chr()的反函数,它表示将字符转换为ASCII码:字符-> ASCII码。
图2:ascii()示例3、asciistr()asciistr()函数是将字符串转换为ascii字符串,如下图3:图3:asciistr()示例关于asciistr()函数,我在网上看到一篇文章说可以用asciistr()函数来判断一个字符串中是否含有中文字符,我看了其思路,挺有参考价值的,大概是这样的:图4:用asciistr()函数判断一个字符串中是否含有中文字符根据上图4可以看出,如果是中文字符,那么用asciistr()转换以后,其形式是\4E2D这样的,前面有斜杠\,但是并不是所有带有\都是中文字符,因为斜杠\本身用asciistr()转换后,其结果是\005C,也是带有\的,所以对于这个字符要特别注意下。
所以,这种方法的思路就是可以先replace掉字符串中的斜杠\,然后再用asciistr()转换,然后判断转换后的字符串中是否有斜杠\,如果有则表示存在中文字符。
toclob() oracle的用法
Oracle中toclob()函数的用法Oracle数据库是一种功能强大的关系数据库管理系统,广泛用于企业级应用程序开发和数据存储。
在Oracle中,toclob()函数是一个非常有用的函数,用于将字符型数据转换为CLOB(字符大对象)类型。
在实际开发中,很多情况下我们需要处理大型文本数据,例如存储文章、日志、报告等。
由于CLOB类型可以存储大量文本数据,因此在这些情况下使用CLOB类型是非常方便的。
而toclob()函数就是用来将通常大小限制为4000个字符的VARCHAR2类型,转换为可以存储大量文本的CLOB类型。
toclob()函数的使用非常简单。
下面是一个示例:```sqlDECLAREv_text VARCHAR2(4000);v_clob CLOB;BEGINv_text := '这是一个示例文本,用于演示toclob()函数的用法。
';v_clob := TOCLOB(v_text);INSERT INTO my_table (clob_column) VALUES (v_clob);END;```在上面的示例中,我们首先声明了一个VARCHAR2类型的变量v_text,然后将一个示例文本赋值给它。
接下来,我们声明了一个CLOB类型的变量v_clob,并使用toclob()函数将v_text转换为CLOB 类型。
最后,我们将v_clob插入到名为my_table的表的clob_column 列中。
通过使用toclob()函数,我们可以方便地将较短的字符型数据转换为CLOB类型,从而满足存储大量文本的需求。
这在处理富文本、长篇文章等场景下非常有用。
需要注意的是,toclob()函数只能将VARCHAR2类型转换为CLOB 类型,如果想要将其他类型的数据转换为CLOB类型,需要先进行适当的类型转换。
综上所述,toclob()函数在Oracle数据库中是一个非常有用的函数,可以方便地将字符型数据转换为CLOB类型。
oracle sql数据类型函数
oracle sql数据类型函数一、Oracle SQL数据类型简介Oracle SQL支持多种数据类型,包括数值类型、字符串类型、日期和时间类型、布尔类型等。
了解这些数据类型有助于更好地利用Oracle SQL进行数据处理。
1.数值类型:包括整数类型(如INTEGER、SMALLINT、TINYINT)、浮点数类型(如FLOAT、DOUBLE PRECISION、NUMERIC)、decimal和char 类型等。
2.字符串类型:包括VARCHAR2、CHAR、NCHAR等。
3.日期和时间类型:包括DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、INTERVAL等。
4.布尔类型:BOOLEAN。
二、Oracle SQL常用函数概述Oracle SQL提供了丰富的函数,可以方便地进行数据处理和分析。
以下为一些常用函数类别:1.数据类型转换与处理函数:如CAST、CONVERT、TRUNC等。
2.字符串处理函数:如LENGTH、SUBSTR、INSTR、LIKE等。
3.数学与逻辑运算函数:如SUM、AVG、MIN、MAX、MOD、LOG、POWER等。
4.日期和时间函数:如SYSDATE、TO_DATE、DATE_ADD、DATE_SUB 等。
5.聚合与分组函数:如GROUP BY、HAVING、SELECT DISTINCT等。
三、实战案例与应用以下为一个简单的实战案例,演示如何使用Oracle SQL数据类型和函数进行数据处理:假设我们有一个员工表(EMPLOYEE),包含以下字段:ID(整数类型)、NAME(字符串类型)、AGE(整数类型)、DEPARTMENT(字符串类型)、SALARY(浮点数类型)、HIRE_DATE(日期类型)、LEAVE_DATE(日期类型)。
1.查询所有员工的详细信息:```SELECT * FROM EMPLOYEE;```2.查询年龄大于30岁的员工名单:```SELECT NAME FROM EMPLOYEE WHERE AGE > 30;```3.计算所有员工的薪资总额:```SELECT SUM(SALARY) FROM EMPLOYEE;```4.查询各部门的平均年龄:```SELECT DEPARTMENT, AVG(AGE) FROM EMPLOYEE GROUP BY DEPARTMENT;```5.统计员工离职人数:```SELECT COUNT(*) FROM EMPLOYEE WHERE LEAVE_DATE IS NOT NULL;```通过以上案例,我们可以看到Oracle SQL数据类型和函数在实际应用中的重要作用。
oracle convert参数
Oracle CONVERT参数1. 简介Oracle数据库是一种关系型数据库管理系统(RDBMS),由Oracle公司开发和维护。
在Oracle数据库中,CONVERT是一个重要的函数,用于在不同字符集之间进行转换。
字符集是指在计算机中用来表示和存储字符的编码系统。
不同的字符集对应着不同的字符编码方案,如UTF-8、GBK、UTF-16等。
当需要在不同字符集之间进行数据传输或存储时,就需要使用CONVERT函数将数据从一个字符集转换为另一个字符集。
2. 使用语法CONVERT函数的语法如下:CONVERT(expr, dest_charset, src_charset)其中,expr是要进行转换的表达式或列名;dest_charset是目标字符集;src_charset是源字符集。
3. 示例以下示例演示了如何使用CONVERT函数进行字符集转换。
3.1 转换为UTF-8假设有一个表格employees,其中包含一个列name,它使用GBK字符集存储员工姓名。
现在我们想将这些姓名转换为UTF-8字符集。
SELECT CONVERT(name, 'UTF8', 'GBK') AS utf8_nameFROM employees;上述SQL语句将查询结果中name列的值从GBK转换为UTF-8,并将结果命名为utf8_name。
3.2 转换为GBK假设有一个表格students,其中包含一个列name,它使用UTF-8字符集存储学生姓名。
现在我们想将这些姓名转换为GBK字符集。
SELECT CONVERT(name, 'GBK', 'UTF8') AS gbk_nameFROM students;上述SQL语句将查询结果中name列的值从UTF-8转换为GBK,并将结果命名为gbk_name。
3.3 转换为其他字符集除了常见的UTF-8和GBK字符集之外,Oracle数据库还支持许多其他字符集,如UTF-16、ISO-8859-1等。
oracle 10g函数大全--转换函数
oracle 10g函数大全--转换函数chartorowid(c1)【功能】转换varchar2类型为rowid值【参数】c1,字符串,长度为18的字符串,字符串必须符合rowid格式【返回】返回rowid值【示例】SELECT chartorowid('AAAADeAABAAAAZSAAA') FROM DUAL;【说明】在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,r owid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。
在重复的记录中,可能所有列的内容都相同,但rowid不会相同.ROWIDTOCHAR(rowid)【功能】转换rowid值为varchar2类型【参数】rowid,固定参数【返回】返回长度为18的字符串【示例】SELECT ROWIDTOCHAR(rowid) FROM DUAL;【说明】在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,r owid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。
在重复的记录中,可能所有列的内容都相同,但rowid不会相同.CONVERT(c1,set1,set2)【功能】将源字符串c1 从一个语言字符集set2转换到另一个目的set1字符集【参数】c1,字符串,set1,set2为字符型参数【返回】字符串【示例】select convert('strutz','we8hp','f7dec') "conversion" from dual;conver------strutzselect convert(name,'us7ascii','zhs16cgb231280') "conversion" from du al;HEXTORAW(c1)【功能】将一个十六进制构成的字符串转换为二进制【参数】c1,十六进制的字符串【返回】字符串【示例】select HEXTORAW('A123') from dual;RAWTOHEX(c1)【功能】将一个二进制构成的字符串转换为十六进制【参数】c1,二进制的字符串【返回】字符串【示例】select RAWTOHEX('A123') from dual;TO_CHAR(x[[,c2],C3])【功能】将日期或数据转换为char数据类型【参数】x是一个date或number数据类型。
oracle的convert函数
oracle的convert函数
Oracle的CONVERT函数是一种用于将字符串从一种字符集转换为另一种字符集的函数。
该函数通常用于将不同语言或不同字符集的文本进行转换,以便在接收端正确地显示或处理。
该函数的语法如下:
CONVERT(string, destination_character_set, source_character_set)
目前Oracle支持的字符集有许多种,包括Unicode、UTF-8、UTF-16、ASCII、ISO 8859等。
在使用CONVERT函数时,我们需要注意一些事项。
首先,我们需要确定源字符集和目标字符集。
如果我们不确定这两个字符集,可以先
通过以下查询来获取:
SELECT NLS_CHARSET_NAME(language) FROM v$language;
该查询将返回所有支持的语言以及它们对应的字符集名称。
我们可以通过查询结果来
确定我们需要转换的字符集。
其次,在进行字符集转换时,需要考虑到一些字符可能在源字符集中无法找到对应的
字符。
这种情况下,我们可以选择使用字符串替换或截取等方式来解决。
另外,我们需要注意到转换后的字符串长度可能会改变。
因此,在使用CONVERT函数时,我们需要留意字符串长度是否超出了目标字段的限制,以避免出现错误。
最后,我们需要注意一些语言之间的特殊字符集转换。
例如,中文字符集GBK可以通
过CONVERT函数转换为UTF-8,但是如果在转换过程中遇到GB18030的字符,则需要使用Iconv 函数来解决。
oracle数据类型及其隐式转换
2)to_date字符值->日期值语法:to_date (string,[format mask],[nls_parameters])参数:string 待转换的字符值format mask:可选参数格式掩码同to_char转换为date时相同。
备注:转换时要根据给定的string设定正确的格式掩码,否则Ora_01840:input value is not long enough for date format.Ora_01862:the numeric value does not match the length of the format item. 3)to_number字符值->数字值语法:to_number (string,[format mask],[nls_parameters])参数:string 待转换的字符值format mask:可选参数格式掩码同to_char转换为number时相同。
备注:如果使用较短的格式掩码就会返回错误。
例如: to_number(123.56,’999.9’)返回错误。
在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据以下规则对数据进行隐式转换1) 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。
假如id列的数据类型为numberupdate t set id='1'; -> 相当于 update t set id=to_number('1');insert into t(id) values('1') -> insert into t values(to_number('1'));2) 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。
如假设id列的数据类型为varchar2select * from t where id=1; -> select * from t where to_number(id)=1;但如果id列的数据类型为number,则select * from t where id='1'; -> select * from t where id=to_number('1');(参考下文)3) 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
To_number:转换成数值类型,如:To_number('1234.5'),结果:1234.5
自动类型转换
Oracle可以自动根据具体情况进行如下的转换:
ceil:求大于等于某数的最小整数,如:ceil(2.35) 3
floor:求小于等于某数的最大整数,如:floor(2.35) 2
round:按指定精度对十进制数四舍五入,如:round(45.923, 1),结果,45.9
round(45.923, 0),结果,46
round(45.923, −1),结果,50
输入并执行查询:
Sql代码
SELECT ename, round(sysdate-hiredate) DAYS
FROM emp
WHERE deptno = 10;
SELECT ename, round(sysdate-hiredate) DAYS
自动转换数值型数据到字符型。
执行以下查询:
Sql代码
SELECT '12.5'||11 FROM dual;
SELECT '12.5'||11 FROM dual;
结果为:
Sql代码
'12.5'
------
12.511
concat:连接两个字符串 concat('SQL', ' Course') SQL Course
substr:给出起始位置和长度,返回子字符串,如:substr('String',1,3) Str
length:求字符串的长度 length('Wellcom') 7
instr:给出起始位置和出现的次数,求子字符串在字符串中出现的位置,如:instr('String', 'r',1,1) 3
trunc:按指定精度截断十进制数,如:trunc(45.923, 1),结果,45.9
trunc(45.923),结果,45
trunc(45.923, −1),结果, 40
使用数值型函数练习。
使用求绝对值函数abs。
Sql代码
SELECT abs(?5) FROM dual;
trunc(to_date('06-2月-03'),'DAY'),结果,02-2月-03
(按周截断)
返回2003年2月的最后一天。
输入并执行查询:
Sql代码
SELECT last_day('08-2月-03') FROM dual;
SELECT last_day('08-2月-03') FROM dual;
lower:将字符串转换成小写,如:lower ('SQL Course') sql course
upper:将字符串转换成大写,如:upper('SQL Course') SQL COURSE
initcap:将字符串转换成每个单词以大写开头,如:initcap('SQL course') Sql Course
RR:解决Y2K问题的年度转换
DY:简写的星期名,如:MON,TUE,FRI,…
DAY:全拼的星期名,如:MONDAY,TUESDAY,…
MON:简写的月份名,如:JAN,FEB,MAR,…
MONTH:全拼的月份名,如:JANUARY,FEBRUARY,…
HH、HH12:12小时制的小时(1~12),如:1,2,3,…,12
replace:用一个字符串替换另一个字符串中的子字符串,如:replace('ABC', 'B', 'D') ADC
如果不知道表的字段内容是大写还是小写,可以转换后比较。
输入并执行查询:
Sql代码
SELECT empno, ename, deptno FROM emp
last_day:返回指定日期所在的月的最后一天,如:last_day('06-2月-03'),结果,28-2月-03
round:按指定格式对日期进行四舍五入,如:round(to_date('13-2月-03'),'YEAR'),结果,01-1月-03
round(to_date('13-2月-03'),'MONTH'),结果,01-2月-03
执行结果为:
Sql代码
'12.5'+11
------------
23.5
'12.5'+11
------------
23.5
说明:在本训练中,因为出现+运算符,说明进行的是算术运算,所以字符串'12.5'被自动转换成数值12.5,然后参加运算。
SELECT abs(?5) FROM dual;
执行结果:
ABS(?5)
---------------
5
说明:求?5的绝对值,结果为5。
字符型函数
ascii:获得字符的ASCII码,如:Ascii('A') 65
chr:返回与ASCII码相应的字符,如:Chr(65) A
FROM emp
WHERE deptno = 10;
返回结果为:
ENAME DAYS
--------------- ---------------------
CLARK 7913
KING 7752
--------------- ---------- ------------------------
7698 BLAKE 30
EMPNO ENAME DEPTNO
--------------- ---------- ------------------------
add_months:返回把月份数加到日期上的新日期,如:add_months('06-2月-03',1),结果,06-3月-03
add_months('06-2月-03',-1),结果,06-1月-03
next_day:返回指定日期后的星期对应的新日期,如:next_day('06-2月-03','星期一'),结果,10-2月-03
WHERE lower(ename) ='blake';
SELECT empno, ename, deptno FROM emp
WHERE lower(ename) ='blake';
结果为:
Sql代码
EMPNO ENAME DEPTNO
round(to_date('13-2月-03'),'DAY'),结果,16-2月-03
(按周四舍五入)
trunc:对日期按指定方式进行截断,如:trunc(to_date('06-2月-03'),'YEAR'),结果,01-1月-03
trunc(to_date('06-2月-03'),'MONTH'),结果,01-2月-03
7698 BLAKE 30
说明:该查询将表中的雇员名转换成小写,与小写的blake进行比较。
日期函数
months_between:返回两个日期间的
月份,如:months_between ('04-11月-05','11-1月-01'),结果,57.7741935
返回结果为:
Sql代码
LAST_DAY('
----------------
28-2月-03
LAST_DAY('
----------------
28-2月-03
说明:该函数给定参数为某月份的任意一天,返回时间为该月份的最后一天。本例中,参数为03年2月8号,返回日期为03年2月28日,是该月的最后一天。
MILLER 7685
说明:该查询使用日期的减法运算求两个日期的相差天数。用round函数对天数进行四舍五入。
转换函数
Oracle的类型转换分为自动类型转换和强制类型转换。常用的类型转换函数有TO_CHAR、TO_DATE或TO_NUMBER
To_char:转换成字符串类型,如:To_char(1234.5, '$9999.9'),结果:$1234.5
数值型函数
abs:求绝对值函数,如:abs(−5) 5
sqrt:求平方根函数,如:sqrt(2) 1.41421356
power:求幂函数,如:power(2,3) 8
cos:求余弦三角函数,如:cos(3.14159) −1
mod:求除法余数,如:mod(1600, 300) 100
HH24:24小时制的小时(0~23),如:0,1,2,…,23
MI:分(0~59),如:0,1,2,…,59
SS:秒(0~59),如:0,1,2,…,59
,./-;: 原样显示的标点符号
'TEXT':引号中的文本原样显示,如:TEXT
将日期转换成带时间和星期的字符串并显示。