常用函数对比

本文转自:http://www.cnblogs.com/neru/archive/2011/08/18/2144049.html

在此以前一向用sqlserver,唯有很少的一点oracle的阅历,以后要用oracle做二个很复杂的囤积进程,感觉好别扭~

为啥就无法用sqlserver呢。。。

 


 

SQL server
与Oracle开发相比

  本文书档案主要从oracle与sql server语法上进展差别性相比,诸如两者在管制,质量,优化等地点的距离不作相比较。

●概念上区分

   1.Oracle 是一种对象关周全据库管理连串(O凯雷德DBMS),而Sql server 只是关系型数据库管

     理系统(RDBMS).

   2.Oracle行使Internet文件系统,该系统基于Java的应用程序,能够使数据库基于成为

     Internet的支出平台;Sql
server 是依照windows

   3.Orace 主要的三类文件是:数据文件,控制文件,复苏日志文件

     Sql server: 首要数据文件(必须有且只好有三个),次要数据文件以及日志文件

   4.两者补助的命令种类大概,数据定义语言,数据操纵语言,事务处理控制语言,

     数据控制语言.在Oracle中,在业务控制语言中除去commit,rollback等还多了2个

     Savepoint,设置保存点。

   5.oracle sql的扩充叫PL/SQL,重要的结构化查询工具有sql*plus,isql*plus, pl/sql等

     Ms sql的恢宏叫Transact-SQL,重要的结构化查询工具就是自带的查询分析器

   6.首要数据类型

     Orace:主要支撑char
,varchar2,long,number,datetime,raw,long raw,clob,blob,bfie

     后面多个是Character数据类型,varchar2协理可变长度的字符串,long帮助可

     变长度的字符数据,raw,long
raw用于存款和储蓄二进制数据,long raw
可变长度

     最后四个是大指标(lob)数据类型,存款和储蓄非结构化的音信,例如声音剪辑,录制文件

     CLOG表示Character Lob,能够储存大批量的字符数据,它对于仓库储存非结构化的XML

     文书档案分外实惠。BLOG代表Binary LOG,此数据类型能够储存大型二进制对象,如

     图形、录制剪辑,声音文件等

     支不帮助,money,货币

     Sql server 主要协助的文件类型char
,varchar,nchar,nvarchar,text,ntext,image,货币类型

     Money,二进制
binary,varbinary等等

●开发语法

bifa365必发,A.SQL 语法

    两者的SQL语法基本上是同等的,只是有个别细节方面包车型地铁难点

一: 表的管住:修改表的布局,如增添,删除列,創建表

       修改表

          1.修改表的列的數據類型,大小的定義不一致,如下边修改數據類型。

            Ms sql是ALTER
TABLE table_name ALTER COLUMN col DECIMAL (5, 2)

               
Oracle是 Alter
TABLE table_name modify(col decimal(5,2))

          2.日增和刪除表的列,兩者是一模一样的

            Alter tabe table_name add(col definition)

            Alter tabe table_name drop column col_name

          3 .Oracle假设不要用某列,然後又不想刪除,就可以将有个别列标记为未用

            Alter tabe table_name set unused(tel_no)

.创制一时表

Oracle 的語法是:

Create global temporary table aa(col number) on commit preserve rows;

临时表只在用户会话时存在的表,或其数额在用户事务处理时期可

不停存在的表,创造权且表时能够钦赐该表是还是不是合宜在用户会话

时期不停存在(使用on commit
preserve rows)

On commit delete rows 代表事务处理实现后去除它的行

            Ms sql的語法是:

               Select * into #temptable from existedtable

二 查询方面:      

1.查表的前N行记录

oracle 是用rownum 如select * from table_name where
rownum<n

             

            Ms sql 是用top 如select top n * from table_name

             

         2.查詢表的結構

Orace 能够通過desc来查看表的组织 语法是:desc table_name

       恐怕利用数据字典表user_tab_coumns也得以查看到

         Select column_name,data_type from user_tab_coumns

         Where table_name=”

           Ms sql能够通過一些系統的存儲過程來看表的結構

             語法是:exec
sp_help table_name

         3.将三个表的多少增加到其它多个表中

a.新表存在前提下:兩者語法是一樣的,如

                 insert into newtable(col1)select col1 from old_table

b.新表不设有前提下,能够用

oracle 可以用Create tabe new
_table_name as select * from old_table

             ms sql 可以用
Select * into new_table from old_table

   三 操作符

         1.連接操作符

             Oracle是 ‘||’; Ms sql是‘+’

         2. Oracle的可比操作符中不对等除了'<>’之外,还有3个 ‘!=’

         3. 算术操作符,都以+-*/;逻辑操作符都以and,not,or(相同點)

         4. oracle汇集操作符除了union,union all之外还参与intersect,minus

           Intersect是仅重返三个查询都有行,minus重回第2个查询有第

           1个查询没有的行

   四   函數

        1.轉換函數

           Oracle 中有to_char(),to_date(),to_number()

           Ms sql 中有cast,convert

        2.系统日期:

Oracle: sysdate

Ms sql:  getdate()

          如

            Select sysdate from
dual 一定要from子句

            Select getdate() 不必然要from子句

         3.Decode函数一定if
else,恐怕ms 中的case语句

           语法是decode(value,if1,then1,if2,then2….)

             如decode(col1,’1′,’true’,’0′,’fase’)

4.例行函数

Nvl 语法是NVL(EXP1,EXP2)
表示若是ex1为空则重回ex2

Nvl2 语法是nvl(exp1,exp2,exp3)表示假诺ex1为空,则重回ex3,否则再次回到ex2

Nullif 语法是nullif(ex1,ex2)
若是那多个表明式相等则赶回空

coalesce语法是coalesce(ex1,ex2,….exn)重回第伍个非空表明式

         5.分組函數

Oracle 中的分組函數Rollup,cube

Rollup重临的结果集带有分组行和小计行,cube产生交叉报表

如:

Select a,b,sum(c) from tabname group by rollup(a,b)

Select a,b,sum(c) from tabname group by cube(a,b)

            Ms sql中的分組函數 compute 和 compute by

              Compute子句为行聚集函数生成汇总值,该汇总值做为2个叠加的行彰显

            在结果集中。没有GROUP BY 子句的情状下,也得以动用首要字COMPUTE.

            此关键字选择MAX,MIN,SUM,COUNT,AVG等函数生成汇总值,而compute by

            则在支配中断时交由该汇总值,compute by
必须总结在order by 子句中。

         還有很多函數,諸如日期函數,字符串函數等等,就不一一作比較了。

         Oracle中還有很多比較好的辨析函數,也不列舉了。

五.Oracle中的数据库对象

同义词

      功能:简化SQL语句;隐藏对象的称呼和主人,提供对象的国有访问等。

      语法:CREATE PUBLIC
SYNONYM seqname FOR OBJECT

序列

     用来扭转唯① 、边续的整数,它一般用来自动生成主键或唯一值的键。

    創建连串: create
sequence seqname [increment by 1] start with 1 maxvalue 10

     minvalue 1 cycle cache

    访问系列:

                   Select seqname.nextval from dual 将重临体系的初叶值

                   Select seqname.currval from dual   重临连串的日前值

       簇(cluster):

            簇是共享相同数据块的一组表,因为这么些表具有同等的列,并且平常一起使用。

          当五个或多少个表的蕴藏在物理上这多少个像样时,能够经过簇来加强运用那一个表的

          SQL联接语句的性质。簇是存款和储蓄表的法门

          应该先成立簇,然后再次创下立簇中的表,

六.Oracle中的对象类型

  1. 抽象数据类型

    此类型是带有贰个或三个子类型的数据类型,并且这一个数据类型并不囿于

   王海鸰式的oracle数据类型

     如:create or replace type
t_mm as object(col number(3),

         col2 varchar2(20))/

       此时得以在创造表时利用该品种,如下

         Create table test (aa varchar2(5),bb t_mm, cc number(10))

       插入记录:

          Insert into test values(‘cccc’, t_mm(1,’col’))

       类型注明:

           用户定义的数据类型也得以表明为
final,not final,instantiable,

           not instantiabe

           Not final表示同意项目派生子类型。暗许是final

           create or replace type t_mm as object(col number(3),

            col2 varchar2(20)) Not final

           not instantiabe表示项目没有构造函数。

  1. 可变数组

    可变数组有助于在单个行中存款和储蓄和重复记录的性质。

    数据与表中的任何数据是储存在一齐的,有限数量的行,无法被索引

    创设可变数组的 语法是:

       create type array1 as varray(5) of varchar2(5)

    向可变数组中插入记录

    Insert into test1 values (‘2ee’, array1(‘1′,’2′,’3′,’4′,’5’) )

    Select * from test1 结果集如下

       2ee

       ‘1’,’2′,’3′,’4′,’5′

    Select col2 from test1 结果集如下

       ‘1’,’2′,’3′,’4′,’5′

    Select * from table(select t.col2 from test1 where col1=’2ee’);
结果集如下

       1

       2

       3

       4

       5

  1. 嵌套表

   它是富含在表中的表,对每行数据项数据没有限制,2个表在

另一表中是作为一列,主表中的每一行的嵌套表能够涵盖若干行。

    创立嵌套表

       先创造二个体系

       Create type ord_ty as object(itemcode varchar2(5),qty _ord
number(5),

      Qty_held number(5));

      创设另一个抽象数据类型,即嵌套表数据类型

      Create type ord_nt as table of ord_ty

      创设嵌套表

       Create table order_mas (orderno varchar2(5),odate date,

       vencode varchar2(5), dets ord_nt) nested table dets store as
ord_nt_tab;

      向嵌套表中插入数据:

       Insert into order_mas values(‘001’,to_date(’18-07-08′,’DD-MM-YY’),

       ‘V009’,ord_nt( ord_ty(‘i001’,10,5),ord_ty(‘i002’,34,2));

      更新嵌套表的值:

       Update table(select e.dets from order_mas e where
e.orderno=’001′) p

       Set value(p)
=ord_ty(‘i090′,8,9) where p.itemcode=’i001’;

      删除嵌套表的值:

        Delete from table(select e.dets from order_mas e where
e.orderno=’001′) p

        where p.itemcode=’i001′;

  1. 对象表

              在指标表中每一行都以二个行对象,对象表与关系表差异:

              对象表中的每一行都有三个OID值,即对象标识符值。该值是在创造行时

             分配的。能够选拔create table 命令来成立对象表。

               在成立对象类型时,Oracle 中是不允许为属性定义约束规范,不过

             能够在创制对象表时为指标类型的质量钦定约束规范。

               Create table vend_master of vend_ty(vencode constraint
vc_pk primary key);

               成立对象表与关系表语法区别

               表的行使情势差别插入数据足以采纳抽象数据类型的构造函数,假使目的

              表所依据抽象数据类型又依据另一抽象数据类型,则必须七个构造函数的嵌

              套调用。

                  Insert into vend_master values (vend_ty());

  1. 对象视图

       借助对象视图能够将面向对象的构造(如抽象数据类型)应用于现有已经

     投入使用的表,而不需重建总体应用程序

B.PL/SQL與T_SQL语法

 

一批處理

  SQL的力量畢竟有限,諸如事務處理方面,批處理於是oracle與ms 都把它進行了擴展,oracle 的擴展叫PL/SQL由注脚部分,可实施部分,十分处理部分构成顺序如下:   

Declare declarations

Begin

      Executable statements

      Exception

          Handles

End

   Ms 的擴展叫
Transact_SQL,簡稱T_SQL.

      批处理:就是二回实施拍卖一组命令的长河。GO关键字樗着批处理的了断。

     如use master

        go

      复杂一点也是由三局地組成:评释部分,可实施部分,至极处理部分。

     不相同的是,異常處理部分一般用跳轉語句來實現。    

例如:

         Declare declarations

          Begin

             Excutable statements

             IF @ERROR <>0 GOTO ERROR

         End

         ERROR:

            BEGIN

             RAISERROR(20058, 16,
-1)

             
return (1)

           
END

二逻辑控制语句       

   1. 控制结构:

     Oracle

         If condition then ……..

         End if

         Case selector

          when exp1 then statements

          Else statements

         End case

     SQL SERVER

         IF condition

           Sql statements

         ELSE

           Sql statements

        Case selector

        When ex1 then statements

        Else statements

        End

   2. 迭代结构

       oracle

          Loop statements end loop;

          While condition

          Loop statement end loop;

       Sql server

            While condition

            Begin

              Sql statement

            End

   面象对象编制程序涉及的概念有对象,类,属性和艺术,面向对象的三大特色是:

   封装,继承和多态。

   将数据和函数包装到三个单元中的进度称为封装。无法从外表访问数据,只好包装在

   类中的那么些函数才能访问数据

   继承能够是SQL类型的接轨和情势的存在延续。

   多态是二个对象能够彰显三种方式的能力,这使得区别的对象足以具备同样的称呼

   的法子,那一个办法达成的天职相似,但落到实处际意况势却今非昔比。

    三.變量與常量

Pl/sql变量与常量能够具备属性,帮衬的属性类型有

%type,%rowtype

宣称引用数据库列或变量的数据类型的变量时,能够选取%type属性。如:

Declare

      Variable_name table_name.col_name %type

        使用这些优点是,不须求知道列vencode的标准数据类型

      %rowtype属性提供表示表中央银行的记录类型。

     四.過程與函數(Procedure & Function)

       a. 建立存儲過程的語法不一致:

           Ms sql 的語法是:

             Create procedure procedure_name

               (

                   @Id int =null,

                   @name varchar(10) out[put]

               )

as

[變量定義區]

begin sql_statement end

——————————————————————–   

             CREATE
FUNCTION function_name (@DATE datetime)

RETURNS
int

AS
begin sql statement end

面向對象的特点之一是封裝,程序包便是对相关PL/SQL类型,子程序,游标,分外,变量,和常量的包装,它蕴涵两局地程序包规格表达和次序包主体

在包规格表明书中,能够申明类型,变量,常量,极度,游标,子程序

先后包主体实今后先后包规格中定义的游标、子程序

        包頭語法部分:

Create or replace package package_name is|as

Public type and item declarations

Subprogram specifications

End package_name

實例如下:

Create or replace package pack_me is

Procedure order_proc(orno varchar2);

  Function    order_fun(ornos varchar2) return varchar2;

End pack_me

包體語法部分:

Create or replace package body package_name is|as

Private type and item decarations

Subprogram bodies

End package_name;

         包體具體實例就不寫了,包頭隻是起一個聲明功能,具體實現部分都在包體裡面。

         下边是开创存款和储蓄进程的语法:

          Create [or replace] procedure procedure_name[arg1
in|out|in out]type {is|as}

           [變量定義區]

          Begin

             Execute Sql statement

          Exception handlers

End

         注意:參數列表那裡,oracle是先定義參數是輸入還是輸出參數,然後再定義

參數類型; 而sql server正好相反

         创制函数的语法:

Create function function_name argument

Return datatype is|as

Local decaration

Begin

Excutable statement

Exception

Handles

End;

      b.變量賦值

1.    Oracle里的用法:存款和储蓄进程中边询问边给变量赋值。

select 某一列名 into 变量名 from table where ..;

相当于sql server中的select 变量名=列. From table where ….

注意:select * /某一列名 into 表名

        2.   Oracle 直接赋值的标志是:’ := ‘

  五 觸發器(Trigger)

        Oracle

        Create or replace trigger trigger_name [before/after]

       [insert/update/delete] on table_name

        变量表明

        begin

        Sql statement

        end

Ms sql

Create trigger trigger_name on table

{for |after|instead of} [insert|update|delete] as sql_statements

    六 遊標(Curcor)

        Oracle中提供三种游标类型,它们是静态游标和ref游标

静态游标又分为隐式游标与显式游标

Ref游标,游标变量是一种引用
类型

隐式游标属性包蕴%notfound,%found,%rowcount,%isopen

如:

       Begin

                    Delete from ta where ord=’ddd’

               If sql%notfound then

                     Dbms_output.put_line(”未找到值)

              Else

                     Dbms_output.put_line(找到并剔除之)

            End if

End

来得游标:能够用上面语句控制游标

      Open cursorname

       Fetch cursor_name into var_name

       Close cursor_name

        创制游标语法:

     Oracle:

       declare variable

       Cursor test is select * from order

    Sql server

       Declare test cursor for select * from order

    七 .错误处理(Exception & test & debug)

有两种类型的不行:一种预约义,其它一种是用户自定义

預定義的類型有许多,如No_data_found,Cursor_already_open

       對於Oracle的調試,能够凭借第1方工具,如toad,Pl.sql
Developer,

       对于sql server选择 变量或然print 方式展开调节和测试

        Oracle万分定义部分的以身作则:

            Exception

          When <exception_name> then statements

           When others then

               Statements

           End;

         其中<exception_name>是系统预订义的名字。

       Raiser_application_error用于创建用户定义的错误音讯的经过,用户定义的失实信息

     能够钦定的10分描述的更详尽

      Sql server在错误处理上多选取自定义。大概是用goto跳转的法子

       如:

        Begin

        Sql statements

        if @error<>0 goto error

        end

        Error:

            Return;

      或是直接用raiserror

      if @error<>0

begin

raiserror(‘产生错误.’,-1,-1)

return (1)

end

好了,两者的重庆大学的差距就写到这,但愿自身公布清楚了,由于东西比较多,所以还有许多实际事物没有写

http://www.cnblogs.com/wangxiaohuo/archive/2008/04/20/1162631.html


 

函数
SQLServer和Oracle的常用函数比较   1.相对值   S:select abs(-1) value
  O:select abs(-1) value from dual
  2.取整(大)   S:select ceiling(-1.001) value   O:select
ceil(-1.001) value from dual
  3.取整(小)   S:select floor(-1.001) value   O:select
floor(-1.001) value from dual
  4.取整(截取)   S:select cast(-1.002 as int) value   O:select
trunc(-1.002) value from dual
  5.四舍五入   S:select round(1.23456,4) value 1.23460   O:select
round(1.23456,4) value from dual 1.2346
  6.e为底的幂   S:select Exp(1) value 2.7182818284590451
  O:select Exp(1) value from dual 2.71828182
  7.取e为底的对数   S:select log(2.7182818284590451) value 1
  O:select ln(2.7182818284590451) value from dual; 1
  8.取10为底对数   S:select log10(10) value 1   O:select
log(10,10) value from dual; 1
  9.取平方   S:select SQUARE(4) value 16   O:select power(4,2)
value from dual 16
  10.取平方根   S:select SQ途胜T(4) value 2   O:select SQ瑞虎T(4) value
from dual 2
  11.求任意数为底的幂   S:select power(3,4) value 81   O:select
power(3,4) value from dual 81
  12.取肆意数   S:select rand() value   O:select
sys.dbms_random.value(0,1) value from dual;
  13.取标记   S:select sign(-8) value -1   O:select sign(-8) value
from dual -1   ———-数学函数
  14.圆周率   S:SELECT PI() value 3.1415926535897931   O:不知道
  15.sin,cos,tan 参数都是弧度为单位   例如:select sin(PI()/2) value
获得1(SQLServer)
  16.Asin,Acos,Atan,Atan2 重临弧度
  17.弧度角度交换(SQLServer,Oracle不亮堂)   DEGREES:弧度-〉角度
  RADIANS:角度-〉弧度
  ———数值间相比较
  18. 求集合最大值   S:select max(value) value from   (select 1
value   union   select -2 value   union   select 4 value
  union   select 3 value)a
  O:select greatest(1,-2,4,3) value from dual
  19. 求集结最小值   S:select min(value) value from   (select 1
value   union   select -2 value   union   select 4 value
  union   select 3 value)a
  O:select least(1,-2,4,3) value from dual
  20.什么处理null值(F2中的null以10替代)   S:select F1,IsNull(F2,10)
value from Tbl   O:select F1,nvl(F2,10) value from Tbl
  ——–数值间比较
  21.求字符序号   S:select ascii(‘a’) value   O:select ascii(‘a’)
value from dual
  22.从序号求字符   S:select char(97) value   O:select chr(97)
value from dual
  23.连接   S:select ’11’+’22’+’33’ value   O:select
CONCAT(’11’,’22’)||33 value from dual
  23.子串地方 –再次来到3   S:select CHARAV4INDEX(‘s’,’sdsq’,2) value
  O:select INST劲客(‘sdsq’,’s’,2) value from dual
  23.模糊子串的地方 –重临2,参数去掉中间%则赶回7   S:select
patindex(‘%d%q%’,’sdsfasdqe’) value
  O:oracle没察觉,但是instr能够由此第陆霾问刂瞥鱿执问?BLAND>  select
INST昂Cora(‘sdsfasdqe’,’sd’,1,2) value from dual 再次来到6
  24.求子串   S:select substring(‘abcd’,2,2) value   O:select
substr(‘abcd’,2,2) value from dual
  25.子串代替 重返aijklmnef   S:SELECT STUFF(‘abcdef’, 2, 3,
‘ijklmn’) value   O:SELECT Replace(‘abcdef’, ‘bcd’, ‘ijklmn’) value
from dual
  26.子串全部沟通   S:没察觉   O:select
Translate(‘fasdbfasegas’,’fa’,’笔者’ ) value from dual
  27.长度   S:len,datalength   O:length
  28.大小写转换 lower,upper
  29.单词首字母大写   S:没发现   O:select INITCAP(‘abcd dsaf df’)
value from dual
  30.左补空格(LPAD的首先个参数为空格则同space函数)   S:select
space(10)+’abcd’ value   O:select LPAD(‘abcd’,14) value from dual
  31.右补空格(ENCOREPAD的首先个参数为空格则同space函数)   S:select
‘abcd’+space(10) value   O:select XC60PAD(‘abcd’,14) value from dual
  32.去除空格   S:ltrim,rtrim   O:ltrim,rtrim,trim
  33. 再次字符串   S:select REPLICATE(‘abcd’,2) value   O:没觉察
  34.发音相似性比较(那多少个单词再次回到值一样,发音相同)   S:SELECT
SOUNDEX (‘Smith’), SOUNDEX (‘Smythe’)   O:SELECT SOUNDEX (‘Smith’),
SOUNDEX (‘Smythe’) from dual   SQLServer中用SELECT
DIFFERENCE(‘Smithers’, ‘Smythers’) 相比soundex的差
  再次回到0-4,4为同音,1参天
  ————–日期函数
  35.系统小时   S:select getdate() value   O:select sysdate value
from dual
  36.光景几日   直接与整数相加减
  37.求日期   S:select convert(char(10),getdate(),20) value
  O:select trunc(sysdate) value from dual   select
to_char(sysdate,’yyyy-mm-dd’) value from dual
  38.求时间   S:select convert(char(8),getdate(),108) value
  O:select to_char(sysdate,’hh24:mm:ss’) value from dual
  39.取日期时间的任何部分   S:DATEPA索罗德T 和 DATENAME 函数
(第一个参数决定)   O:to_char函数 第四个参数决定
  参数———————————下表供给补给   year yy, yyyy
  quarter qq, q (季度)   month mm, m (m O无效)   dayofyear dy, y
(O表星期)   day dd, d (d O无效)   week wk, ww (wk O无效)   weekday
dw (O不明白)   Hour hh,hh12,hh24 (hh12,hh24 S无效)   minute mi, n (n
O无效)   second ss, s (s O无效)   millisecond ms (O无效)
  ———————————————-
  40.当月最终一天   S:不晓得   O:select LAST_DAY(sysdate) value
from dual
  41.本星期的某一天(比如星期日)   S:不知底   O:SELECT
Next_day(sysdate,7) vaule FROM DUAL;
  42.字符串转时间   S:可以平素转恐怕select cast(‘二〇〇〇-09-08’as
datetime) value   O:SELECT To_date(‘2004-01-05 22:09:38′,’yyyy-mm-dd
hh24-mi-ss’) vaule FROM DUAL;
  43.求二日期某一片段的差(比如秒)   S:select
datediff(ss,getdate(),getdate()+12.3) value
  O:直接用七个日子相减(比如d1-d2=12.3)   SELECT
(d1-d2)*24*60*60 vaule FROM DUAL;
  44.基于差值求新的日期(比如分钟)   S:select
dateadd(mi,8,getdate()) value   O:SELECT sysdate+8/60/24 vaule FROM
DUAL;
  45.求区别时区时间   S:不通晓   O:SELECT
New_time(sysdate,’ydt’,’gmt’ ) vaule FROM DUAL;
  —–时区参数,法国首都在东8区应该是Ydt——-   AST ADT 北冰洋标准时间
  BST BDT 卡奔塔利亚湾标准时间   CST CDT 中部标准时间   EST EDT
北部标准时间   培洛霉素T 格林尼治标准时间   HST HDT
阿鲁斯加—阿萨蒂格岛正规时间   MST MDT 山区标准时间   NST 纽芬兰共和国正式时间
  PST PDT 北冰洋正式时间   YST YDT YUKON标准时间 
Oracle援助的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server 把字符转换为ASCII ASCII ASCII 字串连接
CONCAT (expression + expression) 把ASCII转换为字符 CHQX56 CHALacrosse重临字符串中的先河字符(左起) INSTHighlander CHA兰德酷路泽INDEX 把字符转换为小写 LOWELANDLOWE汉兰达 把字符转换为大写 UPPEGL450 UPPEKoleos 填充字符串的左侧 LPAD N/A
清除初阶的空白 LT智跑IM LTCR-VIM 清除底部的空域 哈弗TGL450IM CRUISERTLANDIM
字符串中的开端情势(pattern) INST瑞鹰 PATINDEX 数十次重复字符串 HighlanderPAD
REPLICATE 字符串的语音表示 SOUNDEX SOUNDEX 重复空格的字串 奥迪Q5PAD SPACE
从数字数据转换为字符数据 TO_CHA奥迪Q5 ST凯雷德 子串 SUBST帕杰罗 SUBST奥迪Q7ING 替换字符
REPLACE STUFF 将字串中的各样词首字母大写 INITCAP N/A 翻译字符串
TRANSLATE N/A 字符串长度 LENGTH DATELENGTH or LEN 列表中最大的字符串
GREATEST N/A 列表中幽微的字符串 LEAST N/A 若是为NULL则转移字串 NVL
ISNULL
 
日子函数
函数 Oracle Microsoft SQL Server 日期相加 (date column +/- value) or
ADD_MONTHS DATEADD 三个日子的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF 当前几日子和岁月 SYSDATE GETDATE()
1个月的末段一天 LAST_DAY N/A 时区转换 NEW_TIME N/A 日期后的首个周末
NEXT_DAY N/A 代表日期的字符串 TO_CHATiguan DATENAME 代表日期的整数
TO_NUMBER (TO_CHA景逸SUV)) DATEPALX570T 日期舍入 ROUND CONVE卡宴T 日期截断 TRUNC
CONVECRUISERT 字符串转换为日期 TO_DATE CONVE凯雷德T 如若为NULL则转移日期 NVL
ISNULL
 
改换函数
    函数          Oracle      Microsoft SQL Server 数字转换为字符  
TO_CHA猎豹CS6        CONVE卡宴T 字符转换为数字   TO_NUMBE凯雷德      CONVE奥迪Q5T
日期转换为字符   TO_CHA大切诺基        CONVE奥迪Q7T 字符转换为日期  
TO_DATE        CONVE卡宴T 16进制转换为2进制 HEX_TO_RAW    CONVE汉兰达T
2进制转换为16进制 RAW_TO_HEX    CONVERT
 
别的行级别的函数
      函数           Oracle       Microsoft SQL Server
再次来到第一个非空表明式 DECODE           COALESCE 当前类别值          
CURAV4奥迪Q5VAL            N/A 下七个行列值         NEX电视机AL           N/A
假诺exp1 = exp2, 重临null DECODE NULLIF 用户登录账号ID数字   
UID            SUSE福睿斯_ID 用户登录名           USE中华V           
SUSE翼虎_NAME 用户数据库ID数字      UID            USE福特Explorer_ID
用户数据库名         USE福特Explorer            USEPRADO_NAME 当前用户           
CU汉兰达RENT_USER     CURRENT_USE智跑 用户环境(audit trail) USERENV        N/A
在CONNECT BY子句中的级别 LEVEL N/A
 
合计函数
函数 Oracle Microsoft SQL Server Average AVG AVG Count COUNT COUNT
Maximum MAX MAX Minimum MIN MIN Standard deviation STDDEV STDEV or
STDEVP Summation SUM SUM Variance VARIANCE VAR or VARP
Oracle还有三个可行的函数EXTRACT,提取并且再次来到日期时间或时刻间隔表达式中一定的时间域:
EXTRACT(YEAEnclave FROM 日期)

 


 

仓库储存进程
一. 多表连接查询,更新存款和储蓄进度 Sql存款和储蓄进度 ALTE奥迪Q7 PROCEDURE [dbo].[
GetEvent]   @SCSWId nvarchar(20)= null ,   @ToDate DATETIME,  
@FromDate DATETIME AS   SELECT NOTES.NOTE_ID,   NOTES.NOTE,  
SCSW_CALENDAR.DATE_TIME    FROM SCSW_CALENDAR   LEFT OUTER JOIN NOTES
ON SCSW_CALENDAR.NOTE_ID=notes.note_id   WHERE
SCSW_CALENDAR.SCSW_ID = SCSWId   ORDER BY Patient.PatientId
Oracel存款和储蓄进程
1.查询数据的积存进度 PROCEDURE Get伊芙nt(SCSWId IN VACR-VCHAR2, FromDate IN
DATE, ToDate IN DATE, refOut OUT refcursor) IS BEGIN   OPEN refOut FO牧马人  
select NOTES.NOTE_ID, NOTES.NOTE, SCSW_CALENDAR.DATE_TIME   from
SCSW_CALENDAR   left join NOTES on
SCSW_CALENDAR.NOTE_ID=notes.note_id   where SCSW_CALENDAR.SCSW_ID =
SCSWId   AND SCSW_CALENDAR.DATE_TIME >= FromDate   AND
SCSW_CALENDAR.DATE_TIME < ToDate   order by
SCSW_CALENDAR.DATE_TIME; END GetEvent;
2.立异数据的存款和储蓄进程: procedure Update阿特iclesubmodel ( ArticleSubID
number, ArticleTitle nvarchar2, ArticleKeyWord nvarchar2, ArticleContent
CLOB, CreatePerson nvarchar2, ChangeDate date, SetTop number,
ArticleSubStyleID number, Checked number ) as begin   update
“ArticleSubModel”   set “ArticleTitle”=ArticleTitle,  
“ArticleKeyWord”=ArticleKeyWord,   “ArticleContent”=ArticleContent,  
“CreatePerson”=CreatePerson,   “CreateDate”=ChangeDate,  
“SetTop”=SetTop,   “ArticleSubStyleID”=ArticleSubStyleID,  
“Checked”=Checked   where “ArticleSubID”=ArticleSubID;   commit;  
Exception when others then   rollback; end UpdateArticlesubmodel;
3.删除数据的蕴藏进度 procedure DeleteArticlesubmodel ( ArticleSubID
number ) as begin   delete from “ArticleSubAccessories”   where
“阿特icleSubID”=ArticleSubID;   delete from “阿特icleSubModel”   where
“阿特icleSubID”=ArticleSubID;   commit;   Exception when others then  
rollback; end DeleteArticlesubmodel;

 


 

 

1.  top N 难点 在sql server中,top N
难题很不难消除,如下例:从表stbdbdj中精选排序后的第叁行数据举行赋值。

在sql中解决办法很简短,在select 前边加上:top n 即可,当中 n 代表行数。

select top 1 @entrust_date = entrust_date, @entrust_no = entrust_no
from run2k..stbdbdj where entrust_date = @date and entrust_no >
@entrust_no_q and report_status = ‘1’ order by
entrust_date,entrust_no;

在oracle中,没有top
n那几个命令,我们应用把两层查询方式缓解:首先,把供给摸索的字段值直接开始展览排序,然后在外界进行首回查询,并利用rownum决定行数。

select entrust_date,entrust_no into @entrust_date, @entrust_no from
( select entrust_date,entrust_no from stbdbdj where entrust_date =
@date and entrust_no > @entrust_no_q and report_status = ‘1’
order by entrust_date,entrust_no ) where rownumber <=1 ;

  1. 哪些缓解结果集重返时,* 和变量同时存在的题材
    下边例子表示,在用游标重临结果集时,同时再次来到三个变量的值,在 sql server
    中代码如下所示: select a.*,b.organ_id from run2k..stbbp
    a,run2k..stkaccoarg b where a.date = @entrust_date and a.serial_no =
    @serial_no and a.branch_no = b.branch_no and a.exchange_type =
    b.exchange_type;

但在oracle中却绝非那种用法,’*’前边必需跟from。化解措施如下:
1)大家得以把 ‘*’
变成所要求选拔的字段,正是说选用表中要求出示的整套字段表示*。 例如:

open  p_cursor  for select  branch_no,…,organ_id where …
2)要是那个字段恐怕说变量是从其它一张表中取出来的,同样能够运用下边包车型大巴主意。

open p_cursor for select a.*,b.organ_id; from stkaccoentrust a,
stkaccoarg b where a.branch_no = b.branch_no and a.exchange_type =
b.exchange_type and a.init_date = v_entrust_date and a.serial_no =
v_serial_no;

  1. 外联接难题 sql <—> oracle a = *b <—> a(+)= b a *= b
    <—> a = b(+)

  2. 多条记录求和题材 select sum(A+B+C) into D from … where … group by

单条记录求和 select A+B into C from … where …

  1. case 难题转换 sql: case client_status when ‘0’ then ‘正常’ when ‘1’
    then ‘冻结’ when ‘2’ then ‘挂失’ when ‘3’ then ‘销户’ else ‘未知’ end

oracle:
decode(client_status,’0′,’正常,’1′,’冻结’,’2′,’挂失’,’3′,’销户’,’未知’);

  1. char 和 varchar 类型分裂: char 底部补空格,varchar 底部不补空格。

  2. convert转换难点 sql —> oracle convert(char(5),branch_no)
    —> to_char(branch_no,’99999′) convert(char(19),count(*)) —>
    lpad(to_char(count(*)),19) convert(varchar(20),serial_no) —>
    to_char(serial_no,’999…9′ ) 总共20个9 lpad(to_char(serial_no),20)

  3. charindex(substring,string) —> instr(string,substring) 子串 父串
    —> 父串 子串


 

 

 

Oracle中差别 bifa365必发 1
SQL SE奇骏VE昂科拉中:
本质上没分别。只是函数有如:只好回到三个变量的界定。而存款和储蓄进程可以回到多个。而函数是足以放置在sql中运用的,能够在select中调用,而存款和储蓄进度相当。执行的真面目都一模一样。
    
函数限制比较多,比如无法用权且表,只可以用表变量.还有一对函数都不可用等等.而存款和储蓄进程的界定相对就比较少
      1.   
一般的话,存款和储蓄进程达成的成效要复杂一点,而函数的落到实处的效益针对性相比较强。
      2.    对于仓库储存进程来说能够回来参数,而函数只可以再次来到值只怕表对象。
      3.   
存款和储蓄进程一般是作为一个独自的一些来推行(EXEC执行),而函数能够当做查询语句的2个有的来调用(SELECT调用),由于函数可以回去贰个表对象,因而它能够在查询语句中位居FROM关键字的前面。
      4.    当存储进程和函数被实践的时候,SQL Manager会到procedure
cache中去取相应的询问语句,若是在procedure
cache里没有对号入座的查询语句,SQL Manager就会对存款和储蓄进程和函数进行编写翻译。
      Procedure cache中保留的是推行安排 (execution plan)
,当编写翻译好之后就推行procedure cache中的execution plan,之后SQL
SE途锐VECRUISER会依照各样execution
plan的骨子里情况来考虑是不是要在cache中保存这几个plan,评判的正式贰个是以此execution
plan大概被选用的成效;其次是生成这一个plan的代价,也正是编写翻译的耗费时间。保存在cache中的plan在下次进行时就无须再编写翻译了。
sql
server中总结的用法大部分适用于Oracle,在现实的采纳进程中,还要看系统完结的复杂程度和实在景况.有经验的DBA对于那两边的应用应当早就精晓于胸了,高手路过还请多多指教!

 

转自:http://www.cnblogs.com/jayhong/archive/2009/08/30/1556642.html

 


 

 

http://blog.163.com/mikelisuper/blog/static/72241886201112745343430/

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注