ORACLE和SQL语法区别归纳2.docx

上传人:b****6 文档编号:6089259 上传时间:2023-01-03 格式:DOCX 页数:20 大小:27.39KB
下载 相关 举报
ORACLE和SQL语法区别归纳2.docx_第1页
第1页 / 共20页
ORACLE和SQL语法区别归纳2.docx_第2页
第2页 / 共20页
ORACLE和SQL语法区别归纳2.docx_第3页
第3页 / 共20页
ORACLE和SQL语法区别归纳2.docx_第4页
第4页 / 共20页
ORACLE和SQL语法区别归纳2.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

ORACLE和SQL语法区别归纳2.docx

《ORACLE和SQL语法区别归纳2.docx》由会员分享,可在线阅读,更多相关《ORACLE和SQL语法区别归纳2.docx(20页珍藏版)》请在冰豆网上搜索。

ORACLE和SQL语法区别归纳2.docx

ORACLE和SQL语法区别归纳2

ORACLE和SQL语法区别归纳

文章分类:

数据库

数据类型比较

类型名称

Oracle

SQLServer

比较

字符数据类型CHARCHAR都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb

变长字符数据类型VARCHAR2VARCHAROracle里面最大长度为4kb,SQLServer里面最大长度为8kb

根据字符集而定的固定长度字符串NCHARNCHAR前者最大长度2kb后者最大长度4kb

根据字符集而定的可变长度字符串NVARCHAR2NVARCHAR二者最大长度都为4kb

日期和时间数据类型DATE有Datetime和Smalldatetime两种在oracle里面格式为DMY在SQLSerser里面可以调节,默认的为MDY

数字类型NUMBER(P,S)NUMERIC[P(,S)]Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。

而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。

数字类型DECIMAL(P,S)DECIMAL[P(,S)]Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。

而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。

整数类型INTEGERINT同为整数类型,存储大小都为4个字节

浮点数类型FLOATFLOAT

实数类型REALREAL

ORACLE内部函数大全以及与SQLSERVER的区别:

下面是Oracle支持的字符函数和它们的MicrosoftSQLServer等价函数。

函数OracleMicrosoftSQL Server

把字符转换为ASCII:

ASCIIASCII

字串连接:

CONCAT--------------(expression+expression)

把ASCII转换为字符CHR,CHAR

返回字符串中的开始字符(左起)INSTR,---------------CHARINDEX

把字符转换为小写LOWER---------------------LOWER

把字符转换为大写UPPER--------------------UPPER

填充字符串的左边LPAD--------------------N/A

清除开始的空白LTRIM--------------------LTRIM

清除尾部的空白RTRIM--------------------RTRIM

字符串中的起始模式(pattern)INSTR--------------------PATINDEX

多次重复字符串RPAD--------------------REPLICATE

字符串的语音表示SOUNDEX--------------------SOUNDEX

重复空格的字串RPAD--------------------SPACE

从数字数据转换为字符数据TO_CHAR--------------------STR

子串SUBSTR--------------------SUBSTRING

替换字符REPLACE--------------------STUFF

将字串中的每个词首字母大写INITCAP--------------------N/A

翻译字符串TRANSLATE--------------------N/A

字符串长度LENGTH--------------------DATELENGTHorLEN

列表中最大的字符串GREATEST--------------------N/A

列表中最小的字符串LEAST--------------------N/A

如果为NULL则转换字串NVL--------------------ISNULL

 

日期函数

下面是Oracle支持的日期函数和它们的MicrosoftSQLServer等价函数。

函数Oracle--------------------MicrosoftSQL Server

日期相加(datecolumn+/-value)orADD_MONTHS--------------------DATEADD

两个日期的差(datecolumn+/-value)orMONTHS_BETWEEN--------------------DATEDIFF

当前日期和时间SYSDATE--------------------GETDATE()

一个月的最后一天LAST_DAY--------------------N/A

时区转换NEW_TIME--------------------N/A

日期后的第一个周日NEXT_DAY--------------------N/A

代表日期的字符串TO_CHAR--------------------DATENAME

代表日期的整数TO_NUMBER(TO_CHAR))--------------------DATEPART

日期舍入ROUND--------------------CONVERT

日期截断TRUNC--------------------CONVERT

字符串转换为日期TO_DATE--------------------CONVERT

如果为NULL则转换日期NVL--------------------ISNULL

 

转换函数

下面是Oracle支持的转换函数和它们的MicrosoftSQLServer等价函数。

函数Oracle--------------------MicrosoftSQL Server

数字转换为字符TO_CHAR--------------------CONVERT

字符转换为数字TO_NUMBER--------------------CONVERT

日期转换为字符TO_CHAR--------------------CONVERT

字符转换为日期TO_DATECONVERT

16进制转换为2进制HEX_TO_RAW--------------------CONVERT

2进制转换为16进制RAW_TO_HEX--------------------CONVERT

 

其它行级别的函数

下面是Oracle支持的其它行级别的函数以及它们的MicrosoftSQLServer等价函数。

函数Oracle--------------------MicrosoftSQL Server

返回第一个非空表达式DECODE-------------------------------------COALESCE

当前序列值CURRVAL--------------------N/A

下一个序列值NEXTVAL--------------------N/A

用户登录账号ID数字UID--------------------SUSER_ID

用户登录名USER--------------------SUSER_NAME

用户数据库ID数字UID--------------------USER_ID

用户数据库名USER--------------------USER_NAME

当前用户CURRENT_USER--------------------CURRENT_USER

用户环境(audittrail)USERENV--------------------N/A

在CONNECTBY子句中的级别LEVEL--------------------N/A

 

合计函数

下面是Oracle支持的合计函数和它们的MicrosoftSQLServer等价函数。

函数Oracle--------------------MicrosoftSQL Server

AverageAVG--------------------AVG

CountCOUNT--------------------COUNT

MaximumMAX--------------------MAX

MinimumMIN--------------------MIN

StandarddeviationSTDDEV--------------------STDEVorSTDEVP

SummationSUM--------------------SUM

VarianceVARIANCE--------------------VARorVARP

 

条件测试

Oracle的DECODE语句和MicrosoftSQLServer的CASE表达式都执行条件测试。

当test_value中的值和后面的任何表达式匹配的时候,相关的值就返回。

如果没有找到任何匹配的值,就返回default_value。

如果没有指定default_value,在没有匹配的时候,DECODE和CASE都返回一个NULL。

下表显示了该语句的语法,

同时给出了转换DECODE命令的示例。

OracleMicrosoftSQL 

DECODE(test_value,

expression1,value1

<,expression2,value2][…>

[,default_value]

CREATEVIEWSTUDENT_ADMIN.STUDENT_GPA

(SSN,GPA)

ASSELECTSSN,ROUND(AVG(DECODE(grade

'A',4

'A+',4.3

'A-',3.7

'B',3

'B+',3.3

'B-',2.7

'C',2

'C+',2.3

'C-',1.7

'D',1

'D+',1.3

'D-',0.7

0)),2)

FROMSTUDENT_ADMIN.GRADE

GROUPBYSSN

CASEinput_expression

WHENwhen_expressionTHEN   result_expression

[ELSEelse_result_expression]

END

CREATEVIEWSTUDENT_ADMIN.STUDENT_GPA

(SSN,GPA)

ASSELECTSSN,ROUND(AVG(CASEgrade

WHEN'A'THEN4

WHEN'A+'THEN4.3

WHEN'A-'THEN3.7

WHEN'B'THEN3

WHEN'B+'THEN3.3

WHEN'B-'THEN2.7

WHEN'C'THEN2

WHEN'C+'THEN2.3

WHEN'C-'THEN1.7

WHEN'D'THEN1

WHEN'D+'THEN1.3

WHEN'D-'THEN0.7

ELSE0

END),2)

FROMSTUDENT_ADMIN.GRADE

GROUPBYSSN

 

CASE表达式可以支持用SELECT语句执行布尔测试,这是DECODE命令所不允许的。

欲了解关于CASE表达式的详细信息,

请参阅SQLServer联机手册。

 

把值转换为不同的数据类型

MicrosoftSQLServer的CONVERT和CAST函数都是多目标转换函数。

它们提供了相似的功能,

把一种数据类型的表达式转换为另一种数据类型的表达式,并且支持多种专门数据的格式。

CAST(expressionASdata_type)

CONVERT(datatype[(length)],expression[,style])

CAST是一个SQL-92标准的函数。

这些函数执行同Oracle的TO_CHAR、TO_NUMBER、TO_DATE、HEXTORAW以及RAWTOTEXT函数相同的功能。

这里所指的数据类型是任何表达式将被转换成为的系统数据类型。

不能使用用户定义的数据类型。

长度参数是可选的,

该参数用于char、varchar、binary以及varbinary数据类型。

允许的最大长度是8000。

转换OracleMicrosoftSQL Server

字符到数字TO_NUMBER(?

')--------------------CONVERT(numeric,?

')

数字到字符TO_CHAR(10)--------------------CONVERT(char,10)

字符到日期TO_DATE(?

-JUL-97')

TO_DATE(?

-JUL-1997','dd-mon-yyyy')

TO_DATE('July4,1997','Monthdd,yyyy')--------------------CONVERT(datetime,?

-JUL-97')

CONVERT(datetime,?

-JUL-1997')

CONVERT(datetime,'July4,1997')

日期到字符TO_CHAR(sysdate)

TO_CHAR(sysdate,'ddmonyyyy')

TO_CHAR(sysdate,'mm/dd/yyyy')--------------------CONVERT(char,GETDATE())

CONVERT(char,GETDATE(),106)

CONVERT(char,GETDATE(),101)

16进制到2进制HEXTORAW(?

F')--------------------CONVERT(binary,?

F')

2进制到16进制RAWTOHEX(binary_column)--------------------CONVERT(char,binary_column)

 

请注意字符串是怎样转换为日期的。

在Oracle中,缺省的日期格式模型是“DD-MON-YY”如果你使用任何其它格式,

你必须提供一个合适的日期格式模型。

CONVERT函数自动转换标准日期格式,不需要任何格式模型。

从日期转换到字符串时,CONVERT函数的缺省输出是“ddmonyyyyhh:

mm:

ss:

mmm(24h)”。

用一个数字风格代码来格式化输出,使它能输出为其它类型的日期格式模型。

欲了解CONVERT函数的详细信息,请参阅SQLServer联机手册。

下表显示了MicrosoftSQLServer日期的缺省输出。

WithoutCenturyWithCenturyStandardOutput

-0or100(*)Defaultmonddyyyyhh:

miAM(orPM)

1101USAmm/dd/yy

2102ANSIyy.mm.dd

3103British/Frenchdd/mm/yy

4104Germandd.mm.yy

5105Italiandd-mm-yy

6106-ddmonyy

7107-mondd,yy

8108-hh:

mm:

ss

-9or109(*)Defaultmillisecondsmonddyyyyhh:

mi:

ss:

mmm(AMorPM)

10110USAmm-dd-yy

11111Japanyy/mm/dd

12112ISOyymmdd

-13or113(*)Europedefaultddmonyyyyhh:

mm:

ss:

mmm(24h)

14114-hh:

mi:

ss:

mmm(24h)

 

用户定义函数

OraclePL/SQL函数可以在OracleSQL语句中使用。

在MicrosoftSQLServer中一般可以通过其它方式来实现同样的功能。

在SQLServer中可以用表中给出的查询来代替。

OracleMicrosoftSQL Server

SELECTSSN,FNAME,LNAME,)   TUITION_PAID,

   TUITION_PAID/GET_SUM_

   MAJOR(MAJOR)

   ASPERCENT_MAJOR

FROMSTUDENT_ADMIN.STUDENTSELECTSSN,FNAME,LNAME,TUITION_PAID,TUITION_PAID/SUM_MAJORASPERCENT_MAJOR

FROMSTUDENT_ADMIN.STUDENT,

  (SELECTMAJOR,     SUM(TUITION_PAID)SUM_MAJOR

  FROMSTUDENT_ADMIN.STUDENT

  GROUPBYMAJOR)SUM_STUDENT

WHERESTUDENT.MAJOR=     SUM_STUDENT.MAJOR

CREATEORREPLACEFUNCTIONGET_SUM_MAJOR

(INMAJORVARCHAR2)RETURNNUMBER

ASSUM_PAIDNUMBER;

BEGIN

SELECTSUM(TUITION_PAID)INTO   SUM_PAID

FROMSTUDENT_ADMIN.STUDENT

WHEREMAJOR=INMAJOR;

RETURN(SUM_PAID);

ENDGET_SUM_MAJOR;NoCREATEFUNCTIONsyntaxisrequired;useCREATEPROCEDUREsyntax.

 

比较操作符

Oracle和MicrosoftSQLServer的比较操作符几乎是一样的。

算符OracleMicrosoftSQL Server

等于(=)(=)

大于(>)(>)

小于(<)(<)

大于或等于(>=)(>=)

小于或等于(<=)(<=)

不等于(!

=,<>,^=)(!

=,<>,^=)

不大于,不小于N/A!

>,!

<

在集合中任意成员中ININ

不在集合中的任何成员中NOTINNOTIN

集合中的任意值ANY,SOMEANY,SOME

提交集合中的所有值!

=ALL,<>ALL,

>ALL,<=ALL,>=ALL,!

= SOME,<> SOME,

< SOME,> SOME,

<= SOME,>= SOME!

=ALL,<>ALL,

>ALL,<=ALL,>=ALL,!

= SOME,<> SOME,

< SOME,> SOME,

<= SOME,>= SOME

像模式(Likepattern)LIKELIKE

不像模式(Notlikepattern)NOTLIKENOTLIKE

X和y之间的值BETWEENxANDyBETWEENxANDy

不在x和y之间的值NOTBETWEENNOTBETWEEN

值存在EXISTSEXISTS

值不存在NOTEXISTSNOTEXISTS

值{为|不为}空ISNULL,ISNOTNULLSame.Also=NULL,

!

= NULLforbackwardcompatibility(notrecommended).

 

模式匹配

SQLServer的LIKE关键字提供了有用的通配符搜索功能,这个功能在Oracle中不支持

除了所有的RDBMS都支持的(%)和(_)通配符以外,SQLServer还支持([])和([^])通配符。

([])字符用来查询在一个范围内的所有单个字符。

例如,如果你需要查询包含一个从a到f的字符的数据,

你可以这样写:

“LIKE'[a-f]'”或者“LIKE'[abcdef]'”。

这些附加的通配符的有效性在下表中给出。

OracleMicrosoftSQL 

SELECT*FROMSTUDENT_ADMIN.STUDENT

WHERELNAMELIKE'A%'

ORLNAMELIKE'B%'

ORLNAMELIKE'C%'SELECT*FROMSTUDENT_ADMIN.STUDENT

WHERELNAMELIKE'[ABC]%'

 

[^]通配符用来标记那些不在特定范围内的字符。

例如,如果除了a到f以外的所有字符都是可以接受的,你可以这样书写:

LIKE'[^a-f]'或者LIKE'[^abcdef]'。

欲了解关于LIKE关键字的详细信息,请参阅SQLServer联机手册。

 

在比较中使用NULL

尽管MicrosoftSQLServer传统上支持SQL-92标准的和一些非标准的NULL行为,但是它还是支持Oracle中的NULL的用法。

为了支持分布式查询,SETANSI_NULLS必须设定为ON。

在进行连接的时候,SQLServer的SQLServerODBC驱动程序和OLEDB提供者自动把SETANSI_NULLS设定为ON。

这个设置可以在ODBC数据源、ODBC连接属性、或者是在连接到SQLServer之前在应用程序中设置的OLEDB连接属性中进行配置。

在从DB-Library应用程序中连接时,SETANSI_NULLS缺省为OFF。

当SETANSI_DEFAULTS为ON时,SETANSI_NULLS被允许。

欲了解关于NULL用法的详细信息,请参阅SQLServer联机手册。

 

字串连接

Oracle使用两个管道符号(||)来作为字串连接操作符,SQLServer则使用加号(+)。

这个差别要求你在应用程序中做小小的修改。

OracleMicr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1