分享
 
 
 

把Oracle数据库移植到Microsoft SQL Server 7.0(3)

王朝oracle·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在SQL Server中,关键字DEFAULT可以用来把一列设置为它的缺省值。你不能用Oracle的UPDATE命令来设置一列为它的缺省值。

Transact-SQL和Oracle SQL都支持在一个UPDATE语句中使用子查询。但是Transact-SQL的FROM子句可以用来创建一个基于节点的UPDATE。这个能力是你的UPDATE语法更加可读并且在某种意义上提高了性能。

Oracle

Microsoft SQL

UPDATE

STUDENT_ADMIN.STUDENT S

SET TUITION_TOTAL = 1500

WHERE SSN IN (SELECT SSN

FROM GRADE G

WHERE G.SSN = S.SSN

AND G.CCODE = '1234')

Subquery:

UPDATE

STUDENT_ADMIN.STUDENT S

SET TUITION_TOTAL = 1500

WHERE SSN IN (SELECT SSN

FROM GRADE G

WHERE G.SSN = S.SSN

AND G.CCODE = '1234')

FROM clause:

UPDATE

STUDENT_ADMIN.STUDENT S

SET TUITION_TOTAL = 1500

FROM GRADE G

WHERE S.SSN = G.SSN

AND G.CCODE = '1234'

DELETE语句

在大多数情况下,你不需要修改DELETE语句。但是如果你在Oracle中执行依赖SELECT语句的删除操作,你就必须进行修改,因为在Transact-SQL不支持这种功能。

Transact-SQL支持在WHERE子句中使用子查询,FROM子句也一样。后者可以产生更有效的语句。请参看前面在“UPDATE语句”中的例子。

Oracle

Microsoft SQL

DELETE [FROM]

{table_name | view_name | select_statement}

[WHERE clause]

DELETE

[FROM ]

{

table_name [ [AS] table_alias] WITH ( <table_hint_limited> […n])

| view_name [ [AS] table_alias]

| rowset_function_limited

}

[ FROM {<table_source>} [,…n] ]

[WHERE

{ <search_condition>

|{ [ CURRENT OF

{

{ [ GLOBAL ] cursor_name }

cursor_variable_name

}

]

}

]

[OPTION (<query_hint> [,…n])]

TRUNCATE TABLE语句

在Oracle和Microsoft SQL Server中TRUNCATE TABLE语句的语法是相似的。TRUNCATE TABLE语句用来把一个表中的所有行清除掉,并且这个操作是不能后滚的。该表的结构和索引仍然存在。DELETE触发器不会被执行。如果该表被一个FOREIGN KEY引用,则该表不能被砍掉。

Oracle

Microsoft SQL

TRUNCATE TABLE table_name

[{DROP | REUSE} STORAGE]

TRUNCATE TABLE table_name

在SQL Server中,这个语句只能由表的所有者给出。在Oracle中,只有当你是表的所有者或者有DELETE TABLE系统特权时才能使用该语句。

Oracle的TRUNCATE TABLE命令可以随意的释放被表中的行占据的存储空间。SQL Server的 TRUNCATE TABLE则总是回收被表中的数据和与之关联的索引占据的空间。

在identity和timestamp列中操作数据

Oracle序列是一种和任何给定的表或者列都不直接相关的数据库对象。一列和一个序列的关系是在应用程序中实现的,方法是把一个序列的值分配给一个列。因此在同序列一起工作的时候,Oracle并没有强化任何规则。但是在Microsoft SQL Server的标识列中,值是不能被更新的并且也不能使用DEFAULT关键字。

缺省情况下,数据不能直接插入到一个标识列中。标识列为新插入表的每一行自动产生一个唯一的、顺序的数字。这个缺省设置可以用下面的SET语句覆盖。

SET IDENTITY_INSERT table_name ON

当IDENTITY_INSERT设置为ON时,用户就可以在新行的标识列中插入任何值。为了防止输入重复的值,必须在该列上创建一个唯一的索引。这个语句的目的是允许用户为一行重新创建一个偶然被删除的值。@@IDENTITY可以用来获取最后一个标识值。

TRUNCATE TABLE语句把一个标识列重新设置为它原来的SEED值。如果你不想为一列重新设置标识值,可以用不带WHERE子句的DELETE子句来代替TRUNCATE TABLE语句。你必须估计这会给你的Oracle移植带来什么样的影响,因为ORACLE SEQUENCES不会跟着TRUNCATE TABLE命令重新设置。

对时间信息(timestamp)列,你只能执行插入或者删除操作。如果你试图更新一个时间信息列,你将收到这样的错误消息。

Msg 272, Level 16, State 1 Can't update a TIMESTAMP column.

锁定被请求的行

Oracle用FOR UPDATE子句来锁定在SELECT命令中指定的行。在Microsoft SQL Server中,你不需要使用它的等价子句,因为这是一个缺省行为。

行合计和计算子句

SQL Server的COMPUTE子句用来生成行合计函数(SUM、AVG、MIN、MAX、以及COUNT),这些函数看起来好象是查询结果的附加行。这允许你看到一组结果的详情和汇总。你可以为一个子群(subgroups)计算汇总值,还可以为同一组计算更多的合计函数。

Oracle的SELECT命令语法不支持COMPUTE子句。但是,SQL Server的COMPUTE子句就像在Oracle的SQL*Plus查询工具中能找到的COMPUTE命令一样的工作。

连接子句(Join clauses)

Microsoft SQL Server 7.0允许在一个连接子句中连接多达256个表,包括临时的和永久的表。在Oracle中,没有连接限制。

在Oracle中使用外部连接时,外部连接操作符(+)典型的放置在子列(foreign key)的后面。(+)依靠少数几个唯一值来识别该列。除非子列允许空值,否则总是这样的。如果子列允许空值,则(+)被放置在父列(PRIMARY KEY或者UNIQUE约束)上。你不能把(+)同时放在等号(=)的两边。

用SQL Server,你可以使用(*=)和(=*)外部连接操作符。(*)用来标识一个有很多唯一值的列。如果子列不允许空值,则(*)被放在等号的父列一边。在Oracle中,(*)的放置正好相反。不能把(*)同时放在等号的两边。

(*=)和(=*)被认为是传统的连接操作符。SQL Server也支持下面列出的SQL-92标准的连接操作符。建议你使用这种语法。SQL-92标准语法比(*)操作符更强大,限制更小。

Join操作

描述

CROSS JOIN

这是两个表的交叉产物。如果在一个旧式的连接中没有指定WHERE子句,则返回同一行。在Oracle中,这种类型的连接叫做笛卡儿连接。

INNER

该连接指定返回所有的内部行。任何不匹配的行将被丢弃。该连接同一个标准的Oracle表连接是一样的。

LEFT[OUTER]

这种类型的连接指定返回右边表的所有外部行,即使没有发现任何匹配行。该操作符同Oracle外部连接(+)是一样的。

RIGHT[OUTER]

这种类型的连接指定返回左边表的所有外部行,即使没有发现任何匹配行。该操作符同Oracle外部连接(+)是一样的。

FULL [OUTER]

如果来自任一表的一行不匹配选择标准,指定该行被包括到结果集中,并且它的符合其它表的输出列被设定为NULL。这和把Oracle外部连接操作符放在“=”的两端是一样的(col1(+) = col2(+)),而在Oracle中,这是不允许的。

下面的例子返回所有学生都要上的课程的一个清单。在学生表和年级表之间定义的外部连接允许显示所有的学生,甚至那些没有参加任何课程的学生。在课程表上也有一个外部连接,该连接返回课程名字。如果课程表上没有加上外部连接,则不会返回那些没有参加任何课程的学生,因为他们的课程代码(CCDOE)是空值。

Oracle

Microsoft SQLServer

SELECT S.SSN AS SSN,

FNAME, LNAME

FROM STUDENT_ADMIN.STUDENT S,

DEPT_ADMIN.CLASS C,

STUDENT_ADMIN.GRADE G

WHERE S.SSN = G.SSN(+)

AND G.CCODE = C.CCODE(+)

SELECT S.SSN AS SSN,

FNAME, LNAME

FROM STUDENT_ADMIN.GRADE G

RIGHT OUTER JOIN

STUDENT_ADMIN.STUDENT S

ON G.SSN = S.SSN

LEFT OUTER JOIN

DEPT_ADMIN.CLASS C

ON G.CCODE = C.CCODE

用SELECT语句做表名

Microsoft SQL Server和Oracle都支持在执行查询时用SELECT语句作为表源。SQL Server需要一个别名(alias);而在Oracle中是否使用别名是可选的。

Oracle

Microsoft SQL

SELECT SSN, LNAME, FNAME,

TUITION_PAID, SUM_PAID

FROM STUDENT_ADMIN.STUDENT,

(SELECT SUM(TUITION_PAID) SUM_PAID FROM STUDENT_ADMIN.STUDENT)

SELECT SSN, LNAME, FNAME,

TUITION_PAID, SUM_PAID

FROM STUDENT_ADMIN.STUDENT,

(SELECT SUM(TUITION_PAID) SUM_PAID FROM STUDENT_ADMIN.STUDENT) SUM_STUDENT

读取和修改BLOBs

Microsoft SQL Server用text和image列来实现二进制大对象(binary large objects,BLOBs)。Oracle则用LONG和LONG RAW列来实现BLOBs。在Oracle中,SELECT命令可以查询LONG和LONG RAW列的值。

在SQL Server中,你可以使用标准的Transact-SQL语句或者专门的READTEXT语句来读取text和image列中的数据。READTEXT语句允许你读取text和image列的一部分。Oracle没有为LONG 和LONG RAW提供等价的语句。

READTEXT语句利用了一个text_pointer,该指针可以用TEXTPTR函数获取。TEXTPTR函数返回一个指向特定行中的text或者image的指针,如果查询有多于一行返回的话,则返回指向最后一行中的text或者image的指针。由于TEXTPTR返回的是一个16字节的二进制字符串,所以最好是声明一个内部变量来保持该文本指针,然后在READTEXT中使用这个变量。

READTEXT语句说明了有几个字节要返回。位于@@TEXTSIZE函数中的值,限制了返回的字符或者字节的数量,如果该值小于READTEXT声明的值,就用后者来代替。

SET语句可以用TEXTSIZE参数来说明以字节为单位的由一个SELECT语句返回的文本数据的尺寸。如果你设置一个大小为0的TEXTSIZE,则该尺寸就重设为缺省值(4 KB)。设置TEXTSIZE对@@TEXTSIZE函数有影响。当SQL_MAX_LENGTH 语句选项改变的时候,SQL Server ODBC自动设置TEXTSIZE参数。

在Oracle中,用UPDATE和INSERT命令来改变LONG和LONG RAW列中的值。在SQL Server,你可以用标准的UPDATE和INSERT语句,或者也可以用UPDATETEXT和WRITETEXT语句。UPDATETEXT和WRITETEXT都允许一个nonlogged选项,而且UPDATETEXT还允许对文本或者图形列的部分更新。

UPDATETEXT可以用来代替已有的数据,删除已有的数据,或者插入新数据。新插入的数据可以是一个常数值,表名,列名或者文本指针。

WRITETEXT语句完全覆盖它所影响的列中的任何已有的数据。用WRITETEXT来替换文本数据,用UPDATETEXT来修改文本数据。因为UPDATETEXT语句只修改一个文本或者图形值的一部分而不是全部的值,所以UPDATETEXT语句更灵活一些。

欲了解详细信息,请参阅SQL Server联机手册。

函数

本节中的表显示了Oracle和SQL Server 的scalar-valued和合计函数之间的关系。尽管名字是一样的,很重要的一点是注意到函数参数的个数和类型之间的区别。那些只有Microsoft SQL Server提供的函数在这个清单中没有提及,因为本章限制在使现存的Oracle应用程序的移植工作更容易。例如,这些函数不被Oracle支持:角度(DEGREES),PI(PI),和随机数(RAND)

数字/数学函数

下面是Oracle支持的数字/数学函数以及它们的Microsoft SQL Server等价函数。

函数

Oracle

Microsoft SQLServer

绝对值

ABS

ABS

Arc cosine

ACOS

ACOS

Arc sine

ASIN

ASIN

Arc tangent of n

ATAN

ATAN

Arc tangent of n and m

ATAN2

ATN2

Smallest integer >= value

CEIL

CEILING

Cosine

COS

COS

Hyperbolic cosine

COSH

COT

Exponential value

EXP

EXP

Largest integer <= value

FLOOR

FLOOR

Natural logarithm

LN

LOG

Logarithm, any base

LOG(N)

N/A

Logarithm, base 10

LOG(10)

LOG10

Modulus (remainder)

MOD

USE MODULO (%) OPERATOR

Power

POWER

POWER

Random number

N/A

RAND

Round

ROUND

ROUND

Sign of number

SIGN

SIGN

Sine

SIN

SIN

Hyperbolic sine

SINH

N/A

Square root

SQRT

SQRT

Tangent

TAN

TAN

Hyperbolic tangent

TANH

N/A

Truncate

TRUNC

N/A

Largest number in list

GREATEST

N/A

Smallest number in list

LEAST

N/A

Convert number if NULL

NVL

ISNULL

字符函数

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

函数

Oracle

Microsoft SQLServer

把字符转换为ASCII

ASCII

ASCII

字串连接

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

DATELENGTH or LEN

列表中最大的字符串

GREATEST

N/A

列表中最小的字符串

LEAST

N/A

如果为NULL则转换字串

NVL

ISNULL

日期函数

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

函数

Oracle

Microsoft SQLServer

日期相加

(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_CHAR

DATENAME

代表日期的整数

TO_NUMBER

(TO_CHAR))

DATEPART

日期舍入

ROUND

CONVERT

日期截断

TRUNC

CONVERT

字符串转换为日期

TO_DATE

CONVERT

如果为NULL则转换日期

NVL

ISNULL

转换函数

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

函数

Oracle

Microsoft SQLServer

数字转换为字符

TO_CHAR

CONVERT

字符转换为数字

TO_NUMBER

CONVERT

日期转换为字符

TO_CHAR

CONVERT

字符转换为日期

TO_DATE

CONVERT

16进制转换为2进制

HEX_TO_RAW

CONVERT

2进制转换为16进制

RAW_TO_HEX

CONVERT

其它行级别的函数

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

函数

Oracle

Microsoft SQLServer

返回第一个非空表达式

DECODE

COALESCE

当前序列值

CURRVAL

N/A

下一个序列值

NEXTVAL

N/A

如果exp1 = exp2, 返回null

DECODE

NULLIF

用户登录账号ID数字

UID

SUSER_ID

用户登录名

USER

SUSER_NAME

用户数据库ID数字

UID

USER_ID

用户数据库名

USER

USER_NAME

当前用户

CURRENT_USER

CURRENT_USER

用户环境(audit trail)

USERENV

N/A

在CONNECT BY子句中的级别

LEVEL

N/A

合计函数

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

函数

Oracle

Microsoft SQLServer

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的DECODE语句和Microsoft SQL Server的CASE表达式都执行条件测试。当test_value中的值和后面的任何表达式匹配的时候,相关的值就返回。如果没有找到任何匹配的值,就返回default_value。如果没有指定default_value,在没有匹配的时候,DECODE和CASE都返回一个NULL。下表显示了该语句的语法,同时给出了转换DECODE命令的示例。

Oracle

Microsoft SQL

DECODE (test_value,

expression1, value1

[[,expression2, value2] […]]

[,default_value]

)

CREATE VIEW STUDENT_ADMIN.STUDENT_GPA

(SSN, GPA)

AS SELECT SSN, 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)

FROM STUDENT_ADMIN.GRADE

GROUP BY SSN

CASE input_expression

WHEN when_expression THEN result_expression

[[WHEN when_expression THEN result_expression] [...]]

[ELSE else_result_expression]

END

CREATE VIEW STUDENT_ADMIN.STUDENT_GPA

(SSN, GPA)

AS SELECT SSN, ROUND(AVG(CASE grade

WHEN 'A' THEN 4

WHEN 'A+' THEN 4.3

WHEN 'A-' THEN 3.7

WHEN 'B' THEN 3

WHEN 'B+' THEN 3.3

WHEN 'B-' THEN 2.7

WHEN 'C' THEN 2

WHEN 'C+' THEN 2.3

WHEN 'C-' THEN 1.7

WHEN 'D' THEN 1

WHEN 'D+' THEN 1.3

WHEN 'D-' THEN 0.7

ELSE 0

END),2)

FROM STUDENT_ADMIN.GRADE

GROUP BY SSN

CASE表达式可以支持用SELECT语句执行布尔测试,这是DECODE命令所不允许的。欲了解关于CASE表达式的详细信息,请参阅SQL Server联机手册。

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

Microsoft SQL Server的CONVERT和CAST函数都是多目标转换函数。它们提供了相似的功能,把一种数据类型的表达式转换为另一种数据类型的表达式,并且支持多种专门数据的格式。

CAST(expression AS data_type)

CONVERT (data type[(length)], expression [, style])

CAST是一个SQL-92标准的函数。这些函数执行同Oracle的TO_CHAR、TO_NUMBER、TO_DATE、HEXTORAW以及RAWTOTEXT函数相同的功能。

这里所指的数据类型是任何表达式将被转换成为的系统数据类型。不能使用用户定义的数据类型。长度参数是可选的,该参数用于char、varchar、binary以及varbinary数据类型。允许的最大长度是8000。

转换

Oracle

Microsoft SQLServer

字符到数字

TO_NUMBER('10')

CONVERT(numeric, '10')

数字到字符

TO_CHAR(10)

CONVERT(char, 10)

字符到日期

TO_DATE('04-JUL-97')

TO_DATE('04-JUL-1997',

'dd-mon-yyyy')

TO_DATE('July 4, 1997',

'Month dd, yyyy')

CONVERT(datetime, '04-JUL-97')

CONVERT(datetime, '04-JUL-1997')

CONVERT(datetime, 'July 4, 1997')

日期到字符

TO_CHAR(sysdate)

TO_CHAR(sysdate, 'dd mon yyyy')

TO_CHAR(sysdate, 'mm/dd/yyyy')

CONVERT(char, GETDATE())

CONVERT(char, GETDATE(), 106)

CONVERT(char, GETDATE(), 101)

16进制到2进制

HEXTORAW('1F')

CONVERT(binary, '1F')

2进制到16进制

RAWTOHEX

(binary_column)

CONVERT(char, binary_column)

请注意字符串是怎样转换为日期的。在Oracle中,缺省的日期格式模型是“DD-MON-YY”如果你使用任何其它格式,你必须提供一个合适的日期格式模型。CONVERT函数自动转换标准日期格式,不需要任何格式模型。

从日期转换到字符串时,CONVERT函数的缺省输出是“dd mon yyyy hh:mm:ss:mmm(24h)”。用一个数字风格代码来格式化输出,使它能输出为其它类型的日期格式模型。欲了解CONVERT函数的详细信息,请参阅SQL Server联机手册。

下表显示了Microsoft SQL Server日期的缺省输出。

Without Century

With Century

Standard

Output

-

0 or 100 (*)

Default

mon dd yyyy hh:miAM (or PM)

1

101

USA

mm/dd/yy

2

102

ANSI

yy.mm.dd

3

103

British/French

dd/mm/yy

4

104

German

dd.mm.yy

5

105

Italian

dd-mm-yy

6

106

-

dd mon yy

7

107

-

mon dd, yy

8

108

-

hh:mm:ss

-

9 or 109 (*)

Default milliseconds

mon dd yyyy hh:mi:ss:mmm (AM or PM)

10

110

USA

mm-dd-yy

11

111

Japan

yy/mm/dd

12

112

ISO

yymmdd

-

13 or 113 (*)

Europe default

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

用户定义函数

Oracle PL/SQL函数可以在Oracle SQL语句中使用。在Microsoft SQL Server中一般可以通过其它方式来实现同样的功能。

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

Oracle

Microsoft SQLServer

SELECT SSN, FNAME, LNAME, ) TUITION_PAID,

TUITION_PAID/GET_SUM_

MAJOR(MAJOR)

AS PERCENT_MAJOR

FROM STUDENT_ADMIN.STUDENT

SELECT SSN, FNAME, LNAME, TUITION_PAID, TUITION_PAID/SUM_MAJOR AS PERCENT_MAJOR

FROM STUDENT_ADMIN.STUDENT,

(SELECT MAJOR, SUM(TUITION_PAID) SUM_MAJOR

FROM STUDENT_ADMIN.STUDENT

GROUP BY MAJOR) SUM_STUDENT

WHERE STUDENT.MAJOR = SUM_STUDENT.MAJOR

CREATE OR REPLACE FUNCTION GET_SUM_MAJOR

(INMAJOR VARCHAR2) RETURN NUMBER

AS SUM_PAID NUMBER;

BEGIN

SELECT SUM(TUITION_PAID) INTO SUM_PAID

FROM STUDENT_ADMIN.STUDENT

WHERE MAJOR = INMAJOR;

RETURN(SUM_PAID);

END GET_SUM_MAJOR;

No CREATE FUNCTION syntax is required; use CREATE PROCEDURE syntax.

比较操作符

Oracle和Microsoft SQL Server的比较操作符几乎是一样的。

算符

Oracle

Microsoft SQLServer

等于

(=)

(=)

大于

(>)

(>)

小于

(<)

(<)

大于或等于

(>=)

(>=)

小于或等于

(<=)

(<=)

不等于

(!=, <>, ^=)

(!=, <>, ^=)

不大于,不小于

N/A

!> , !<

在集合中任意成员中

IN

IN

不在集合中的任何成员中

NOT IN

NOT IN

集合中的任意值

ANY, SOME

ANY, SOME

提交集合中的所有值

!= ALL, <> ALL, < ALL,

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

<SOME, >SOME,

<=SOME, >=SOME

!= ALL, <> ALL, < ALL,

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

<SOME, >SOME,

<=SOME, >=SOME

像模式(Like pattern)

LIKE

LIKE

不像模式(Not like pattern)

NOT LIKE

NOT LIKE

X和y之间的值

BETWEEN x AND y

BETWEEN x AND y

不在x和y之间的值

NOT BETWEEN

NOT BETWEEN

值存在

EXISTS

EXISTS

值不存在

NOT EXISTS

NOT EXISTS

值{为|不为}空

IS NULL, IS NOT NULL

Same. Also = NULL,

!=NULL for backward compatibility (not recommended).

模式匹配

SQL Server的LIKE关键字提供了有用的通配符搜索功能,这个功能在Oracle中不支持。除了所有的RDBMS都支持的(%)和(_)通配符以外,SQL Server还支持([ ])和([^])通配符。

([ ])字符用来查询在一个范围内的所有单个字符。例如,如果你需要查询包含一个从a到f的字符的数据,你可以这样写:“LIKE '[a-f]'”或者“LIKE '[abcdef]'”。这些附加的通配符的有效性在下表中给出。

Oracle

Microsoft SQL

SELECT * FROM STUDENT_ADMIN.STUDENT

WHERE LNAME LIKE 'A%'

OR LNAME LIKE 'B%'

OR LNAME LIKE 'C%'

SELECT * FROM STUDENT_ADMIN.STUDENT

WHERE LNAME LIKE '[ABC]%'

[^]通配符用来标记那些不在特定范围内的字符。例如,如果除了a到f以外的所有字符都是可以接受的,你可以这样书写:LIKE '[^a - f]'或者LIKE '[^abcdef]'。

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

第一頁    上一頁    第3頁/共4頁    下一頁    最後頁
第01頁 第02頁 第03頁 第04頁 
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有