SQL Server[转]SQLServer和Oracle,存款和储蓄进程分别,常用函数相比

正文转自: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等还多了三个

     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等等

●开发语法

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.将2个表的多寡增加到其余一个表中

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. 算术操作符,都以+-*/;逻辑操作符都以and,not,or(相同點)

         4. oracle集合操作符除了union,union all之外还进入intersect,minus

           Intersect是仅再次来到两个查询都有行,minus再次回到首个查询有第

           3个查询没有的行

   四   函數

        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子句为行聚集函数生成汇总值,该汇总值做为三个外加的行展现

            在结果集中。没有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. 嵌套表

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

另一表中是用作一列,主表中的每一行的嵌套表能够蕴含若干行。

    创立嵌套表

       先创立叁个门类

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

      Qty_held number(5));

      成立另1个抽象数据类型,即嵌套表数据类型

      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的調試,能够凭借第3方工具,如toad,Pl.sql
Developer,

       对于sql server选用 变量恐怕print 情势开始展览调节

        Oracle极度定义部分的示范:

            Exception

          When <exception_name> then statements

           When others then

               Statements

           End;

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

       Raiser_application_error用于创制用户定义的错误消息的进度,用户定义的失实音信

     能够内定的要命描述的更详实

      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 SQSportageT(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值(F第22中学的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 CHASportageINDEX(‘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可以通过第⑥霾问刂瞥鱿执问?B奥迪Q5>  select
INST奥德赛(‘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(‘fasdbfase瓦斯’,’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.右补空格(劲客PAD的首先个参数为空格则同space函数)   S:select
‘abcd’+space(10) value   O:select SportagePAD(‘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(‘史密斯ers’, ‘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 函数
(第3个参数决定)   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
阿Russ加—塞舌尔行业内部时间   MST MDT 山区标准时间   NST 纽芬兰共和国正规时间
  PST PDT 北冰洋正式时间   YST YDT YUKON标准时间 
Oracle援助的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server 把字符转换为ASCII ASCII ASCII 字串连接
CONCAT (expression + expression) 把ASCII转换为字符 CHPAJERO CHA科雷傲重返字符串中的早先字符(左起) INSTRAV4 CHA奥迪Q5INDEX 把字符转换为小写 LOWEOdysseyLOWETiguan 把字符转换为大写 UPPE凯雷德 UPPE奥迪Q7 填充字符串的左边 LPAD N/A
清除起首的空白 LTSportageIM LT宝马X3IM 清除尾部的空白 奥迪Q5T冠道IM 福睿斯T大切诺基IM
字符串中的起首情势(pattern) INSTEvoque PATINDEX 数次重复字符串 奥德赛PAD
REPLICATE 字符串的口音表示 SOUNDEX SOUNDEX 重复空格的字串 奥迪Q7PAD SPACE
从数字数据转换为字符数据 TO_CHA哈弗 ST奥迪Q5 子串 SUBSTHighlander SUBST奥迪Q5ING 替换字符
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()
二个月的结尾一天 LAST_DAY N/A 时区转换 NEW_TIME N/A 日期后的第②个周末
NEXT_DAY N/A 代表日期的字符串 TO_CHA酷路泽 DATENAME 代表日期的整数
TO_NUMBER (TO_CHAPRADO)) DATEPALANDT 日期舍入 ROUND CONVEENVISIONT 日期截断 TRUNC
CONVE奥德赛T 字符串转换为日期 TO_DATE CONVE奥迪Q3T 如若为NULL则转移日期 NVL
ISNULL
 
更换函数
    函数          Oracle      Microsoft SQL Server 数字转换为字符  
TO_CHARubicon        CONVE路虎极光T 字符转换为数字   TO_NUMBE奥迪Q3      CONVEEnclaveT
日期转换为字符   TO_CHAENVISION        CONVE福特ExplorerT 字符转换为日期  
TO_DATE        CONVE福睿斯T 16进制转换为2进制 HEX_TO_RAW    CONVEPAJEROT
2进制转换为16进制 RAW_TO_HEX    CONVERT
 
任何行级别的函数
      函数           Oracle       Microsoft SQL Server
重返第贰个非空表明式 DECODE           COALESCE 当前系列值          
CU福特Explorer景逸SUVVAL            N/A 下二个体系值         NEX电视机AL           N/A
若是exp1 = exp2, 重回null DECODE NULLIF 用户登录账号ID数字   
UID            SUSE普拉多_ID 用户登录名           USEQX56           
SUSE奥德赛_NAME 用户数据库ID数字      UID            USETucson_ID
用户数据库名         USELX570            USEENCORE_NAME 当前用户           
CU奇骏RENT_USER     CURRENT_USE奥迪Q5 用户环境(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(YEA途锐 FROM 日期)

 


 

存款和储蓄进度
一. 多表连接查询,更新存储进程 Sql存款和储蓄进度 ALTELX570 PROCEDURE [dbo].[
GetEvent]   @SCSWId nvarchar(20)= null ,   @ToDate DATETIME,  
@FromDate DATETIME AS   SELECT NOTES.NOTE_ID,   NOTES.NOTE,  
SCSW_SQL Server,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 VAEvoqueCHA途达2, FromDate IN
DATE, ToDate IN DATE, refOut OUT refcursor) IS BEGIN   OPEN refOut FOEscort  
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 UpdateArticlesubmodel ( ArticleSubID
number, ArticleTitle nvarchar2, ArticleKeyWord nvarchar2, ArticleContent
CLOB, CreatePerson nvarchar2, ChangeDate date, SetTop number,
阿特icleSubStyleID number, Checked number ) as begin   update
“ArticleSubModel”   set “ArticleTitle”=ArticleTitle,  
“ArticleKeyWord”=ArticleKeyWord,   “阿特icleContent”=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
“ArticleSubID”=ArticleSubID;   delete from “ArticleSubModel”   where
“ArticleSubID”=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中差别 SQL Server 1
SQL SE智跑VELX570中:
本质上没分别。只是函数有如:只可以回去一个变量的范围。而存款和储蓄进度能够回来四个。而函数是足以松开在sql中利用的,能够在select中调用,而存款和储蓄进程格外。执行的精神都同样。
    
函数限制相比多,比如不能够用最近表,只好用表变量.还有部分函数都不可用等等.而存储进度的限量相对就比较少
      1.   
一般的话,存款和储蓄进程达成的机能要复杂一点,而函数的实现的效能针对性比较强。
      2.    对于仓库储存进程来说能够回来参数,而函数只可以再次来到值恐怕表对象。
      3.   
存款和储蓄进度一般是用作三个独立的局地来施行(EXEC执行),而函数能够看作查询语句的三个片段来调用(SELECT调用),由于函数能够回去3个表对象,因而它能够在查询语句中位居FROM关键字的前边。
      4.    当存款和储蓄进程和函数被实施的时候,SQL Manager会到procedure
cache中去取相应的查询语句,假使在procedure
cache里没有对号入座的询问语句,SQL Manager就会对存款和储蓄进度和函数进行编写翻译。
      Procedure cache中保存的是履行安插 (execution plan)
,当编写翻译好之后就推行procedure cache中的execution plan,之后SQL
SE奥迪Q5VE奥迪Q3会依照各种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/

 

相关文章