Heim  >  Artikel  >  Datenbank  >  ORACLE单行函数与多行函数之五:转换函数示例

ORACLE单行函数与多行函数之五:转换函数示例

WBOY
WBOYOriginal
2016-06-07 15:50:391048Durchsuche

一、数据类型的隐式转换规则: 字符串可以转化为数字和日期。数字要合法,日期要式匹配。 下面两句执行结果一样: BYS@bys1select ename,empno from emp where empno='7788'; BYS@bys1select ename,empno from emp where empno=7788; ENAME EMPNO ----------

一、数据类型的隐式转换规则:

字符串可以转化为数字和日期。数字要合法,日期要格式匹配。
下面两句执行结果一样:
BYS@bys1>select ename,empno from emp where empno='7788';
BYS@bys1>select ename,empno from emp where empno=7788;
ENAME           EMPNO
---------- ----------
SCOTT            7788
数字和日期在赋值的时候也可以转为字符串,但在表达式的时候不可以转换。如下:
BYS@bys1>select ename,empno from emp where ename='123';
no rows selected
BYS@bys1>select ename,empno from emp where ename=123;
select ename,empno from emp where ename=123
                                  *
ERROR at line 1:
ORA-01722: invalid number
TO_DATE能否隐式转换的示例:http://blog.csdn.net/q947817003/article/details/13015993
######################################################################################

二、最常用的转换函数:TO_CHAR,TO_DATE,TO_NUMBER

TO_CHAR 将给出的日期、数字转换为字符。

日期类型转换为字符类型:加fm消除前置的0或空格,还可以使用双引号来加入字符。
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),to_char(sysdate,'fmyyyy"年"/mm/dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY/MM/DDHH2 TO_CHAR(SYSDATE,'FMYYYY"年"/MM
------------------------------ ------------------------------
2013/11/02 20:10:07            2013年/11/2 20:10:7
to_char转换数字类型
9是代表有多少宽度,如果不足会显示成######;0代表强制显示0,可以放在最后或最前,但不会改变你的结果;G是千分符,D是小数点;可以在数字前加货币符号$,会强制显示。
select to_char(456789) as a1,to_char(456789,'00999,999.0000') as a2,to_char(456789,'$999,999.00') as a3,to_char(456789,'$999G999D00') as a4,to_char(456789,'$99,999.00') as a5 from dual;
A1     A2              A3           A4           A5
------ --------------- ------------ ------------ -----------
456789  00456,789.0000  $456,789.00  $456,789.00 ###########

将十进制的数转换为十六进制的数请使用to_char函数。

数据库中16进制的表达是按照字符串来描述的,所以将十进制的数转换为十六进制的数使用to_char函数

BYS@bys1>select to_char(10,'xxx'), to_char(42,'xxx') from dual;
TO_C TO_C
---- ----

   a   2a

TO_NUMBER将给出的字符转换为数字

SQL> select to_number('1999') year from dual;

     YEAR
---------
     1999
将十六进制的数转换为十进制的数请使用to_number函数。
如下,16进制A是10.2A是2*16+A=42.注意xxx,如果转换的数比较大,要多写几个,避免位数不足而报错。
BYS@bys1>select to_number('a','xxx'), to_number('2a','xxx') from dual;
TO_NUMBER('A','XXX') TO_NUMBER('2A','XXX')
-------------------- ---------------------
                  10                    42

TO_DATE(string,'format')  将字符串转化为ORACLE中的一个日期.注意日期是格式和语言敏感的。

更多在http://blog.csdn.net/q947817003/article/details/13015993

BYS@bys1>select to_date('2013/10/25 19:40:31' ,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_DATE('2013/10/25
-------------------

2013/10/25 19:40:31

下面例子引用引烈讲义:

yy是两位来表示年,世纪永远和说话者的当前世纪相同。
RR比较灵活,它将世纪分为上半世纪和下半世纪。如果你处于上半世纪,描述的是0-49,那么就和当前世纪相同,描述的是50-99就是上世纪。如果你处于下半世纪,描述的是0-49,那么是下个世纪,描述的是50-99就是当前世纪。从而可以看出,RR的设计完全为了1990年到2010之间我们的思维习惯而设计的。当我们时间到2050前后,使用起来就非常的别扭。

select to_char(sysdate,'yyyy') "当前",to_char(to_date('98','yy'),'yyyy') "yy98",to_char(to_date('08','yy'),'yyyy') "yy08",to_char(to_date('98','rr'),'yyyy') "rr98",to_char(to_date('08','rr'),'yyyy') "rr08" from dual;
当前 yy98 yy08 rr98 rr08
---- ---- ---- ---- ----
2013 2098 2008 1998 2008

##########################################################################################################################################

三、其它转换函数--有些不懂尚未实验

1.GREATEST  返回一组表达式中的最大值,即比较字符的编码大小.

.LEAST  返回一组表达式中的最小值
SQL> select greatest('AA','AB','AC') from dual;

GR
--
AC
SQL> select greatest('白','李','张') from dual;
GREATEST('白','李','张')
------------------------

SQL> select least('白','李','张') from dual;
LEAST('白','李','张')
---------------------

2.CHARTOROWID  将字符数据类型转换为ROWID类型

ROWIDTOCHAR     将ROWID数据类型转换为字符类型
BYS@bys1>select rowid,rowidtochar(rowid),chartorowid(rowidtochar(rowid)),ename from emp where rownum ROWID              ROWIDTOCHAR(ROWID) CHARTOROWID(ROWIDT ENAME
------------------ ------------------ ------------------ ----------
AAAST0AAEAAAALDAAA AAAST0AAEAAAALDAAA AAAST0AAEAAAALDAAA SMITH

3.CONVERT(c,dset,sset)

将源字符串 sset从一个语言字符集转换到另一个目的dset字符集
SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;
conver
------
strutz

4.DUMP(s,fmt,start,length)

DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;
GLOBAL_NAME                    DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD                   Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

5.BFILENAME(dir,file)
指定一个外部二进制文件
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));

6.CONVERT('x','desc','source')
将x字段或变量的源source转换为desc

7.EMPTY_BLOB()和EMPTY_CLOB()
这两个函数都是用来对大数据类型字段进行初始化操作的函数





Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn