《SQL 21日自学通(V3.0)(PDF格式)》第135章


TRANSACT…SQL 中的通配符 
在 SQL 中使用通配符的内容是在第 3 天的 表达式 条件与操作 中介绍的 LIKE 
可以让你在 SQL 语句中使用通配符 通配符的使用增加了灵活性 在 TRANSACT…SQL 中 
可供使用的通配符如下 
l 下划线可以代表任何单个的字符 例如 _MITH 就是查询 5 个字符并且是以 MITH 
结尾的 
l 百分号可以代表一个或多个字符 例如 WILL%通配符可以返回 WILLIAMS 和 
WILL 
l 中括号可以匹配在括号内的字符 例如 'ABC'可以查询包括 A B C 的字符串 
l 如果在中括号中使用了脱字符^ 那就是说匹配所有的字符但不包括中括号中给出 
的 例如 '^ABC'表示查询所有的字符 除了 A B C 
使用 PUTE 来生成摘要报告 
TRANSACT…SQL 也具有生成摘要报告的能力 其命令为 PUTE 它的语法与它 
在 SQL*PLUS 的语法极为相似 见第 20 天的 SQL*PULS 
下边的查询将会产生关于所有击球手的报告 包括每个击球手的本垒数和所有击球手 
总的本垒数 
输入 
select name; homeruns from batters pute sum(homeruns) 
分析 
在上一个例子中 PUTE 独自对报告进行了估算 然而 PUTE BY 则可以对 
整个报告进行分组评估 如下例所示 
语法 
PUTE FUNCTION(expression) 'BY expression' 
where the FUNCTION might include SUM; MAX; MIN; etc。 and 
EXPRESSION is usually a column name or alias。 
428 
…………………………………………………………Page 429……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
日期转换 
SYBASE 与 MICROSOFT SQL SERVER 可以向表中插入不同格式的日期 它们也可以 
用不同的格式来表达日期 在这一部分将告诉你如何使用 SQL SERVER 的 CONVERT 来 
实现多种形式的日期显示方法 
语法 
CONVERT (datatype '(length)'; expression; format) 
在 SQL SERVER 中使用 CONVERT 时有下列日期格式是可用的 
Format code Format picture 
100 mon dd yyyy hh:miAM/PM 
101 mm/dd/yy 
102 yy。mm。dd 
103 dd/mm/yy 
104 dd。mm。yy 
105 dd…mm…yy 
106 dd mon yy 
107 mon dd; yy 
108 hh:mi:ss 
109 mon dd; yyyy hh:mi:ss:mmmAM/PM 
110 mm…dd…yy 
111 yy/mm/dd 
112 yymmdd 
输入 
select 〃PayDate〃 = convert(char(15); paydate; 107) from payment_table where customer_id = 012845 
输出 
PayDate 
May 1; 1997 
分析 
在上例中使用的 CONVERT 转换格式中的 107 从上表中可以知道 107 将以 MON 
DD YY 的形式显示日期 
SQL SERVER 的诊断工具— — SET 命令 
TRANSACT…SQL 提供了一系列的 SET 命令可以让你打开不同的选项以帮助分析 
TRANSACT…SQL 的语句 这里给出了一些常见的 SET 命令 
l SET STATISTICS IO ON 可以让服务器返回请示的物理和逻辑页数 
429 
…………………………………………………………Page 430……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
l SET STATISTICS TIME O 可以让服务器返回语句的运行时间 
l SET SHOWPLAN ON 可以让服务器返回当前正在运行的计划中的查询 
l SET NOEXEC ON 可以让服务器编译设计过的查询但不运行 
l SET PARSONLY ON 可以让服务器对所设计的查询进行语法检查 但并不运行 
TRANSACT…SQL 也提供下边的命令来帮助你对输出的显示进行控制 
l SET ROWCOUNT N 可以让服务器只返回查询中的前 N 行 
l SET NOCOUNT ON 不必报告查询所返回的行数 
注 如果你对 TRANSACT…SQL 的语句调整比较关心 SQL 那么请参见第 15 天的 对 SQL 
语句的优化以提高性能 
总结 
今天所讨论的主题增加了你对使用 SQL 编程的一些知识 关于基本的 SQL 内容你已 
经在前些天学习过了 它为你进行数据库编程打下了一个良好的基础 但是 这些内容只 
是基本的东西 SQL 过程语言的概念已经在昨天解释过了 今天你又学习了一种基本的 
SQL 这对于你— — 数据库程序员 — — 在访问数据库时提供了强大的功能 
在 SYBASE 和 MICROSOFT 的 SQL SERVER 中的 TRANSACT…SQL 提供了许多你可 
以在第三代编程语言和第四代编程语言中可以找到的编程结构 这包括 IF 条件与 WHILE 
循环以及局部和全局变量的定义能力 
需要明白的是今天所介绍的内容只是 TRANSACT…SQL 的基本特性和技术 并对所有 
你可用的工具有了一个感性的认识 对于它的更详细的内容你需要参见 MICROSOFT SQL 
SERVER 的 TRANSACT…SQL 文档 
问与答 
问 在 SQL 中是否提供了 FOR 循环 
答 像 FOR 循环 WHILE 循环以及 CASE 分支等都是对 ANSI 标准的 SQL 的扩展 所以 
对于不同的数据库系统它们的使用方法有很大的不同 例如 在 ORACLE 中提供了 FOR 
循环 而在 TRANSACT…SQL 中就没有提供 当然 可以在 WHILE 循环都使用一个变 
量来模拟 FOR 循环 
430 
…………………………………………………………Page 431……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
问 如果我写一个 GUI 风格的 WINDOWS 或 MACINTOSH 应用程序 其中有对话框 
之类的元素 这时我是否可以使用 PRINT 语句来向用户输出信息 
答 SQL 与平台是完全独立的 所以 PRINT 语句不能将信息输出至对话框中 如果你想输 
出信息给用户 你的 SQL 过程将会返回一个预定义的值来表示成功或失败 而用户则 
可以从查询的状态中得到通知 PRINT 命令在调试时最有用 因为在存储过程中的 
PRINT 命令将不会总是向屏幕输出 
校练场 
问 在 ORACLE 的 PL/SQL 中与在 TRANSACT…SQL 中 SQL 字的使用方法与 ANSI 标准 
的 SQL 是完全相同的 对不对 
问 静态的 SQL 比动态的 SQL 灵活性差 尽管它的性能要比动态的好 对不对 
练习 
1 如果你没有使用 SYBASE 或 MICR
小说推荐
返回首页返回目录