﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Jacally-文章分类-DataBase</title><link>http://www.blogjava.net/jacally/category/19413.html</link><description>Java原生态</description><language>zh-cn</language><lastBuildDate>Fri, 13 Apr 2007 06:14:31 GMT</lastBuildDate><pubDate>Fri, 13 Apr 2007 06:14:31 GMT</pubDate><ttl>60</ttl><item><title>oracle的case函数和case控制结构 (摘)</title><link>http://www.blogjava.net/jacally/articles/110379.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Fri, 13 Apr 2007 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/110379.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/110379.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/110379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/110379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/110379.html</trackback:ping><description><![CDATA[<div class=storyTitle>oracle的case函数和case控制结构 </div>
<div class=noDisplay>=========================================================== </div>
<div class=storyInfo>作者: zhouwf0726(http://zhouwf0726.itpub.net)<br>发表于:2006.07.25 12:42<br>分类: oracle开发 <br>出处：http://zhouwf0726.itpub.net/post/9689/157964<br>--------------------------------------------------------------- <br></div>
<div class=storytext>
<p><span class=bold><span class=smalltxt><strong>oracle的case函数</strong></span></span>create sequence STUDENT_SEQUENCE;<br><br>CREATE TABLE students (<br>id NUMBER(5) PRIMARY KEY,<br>stu_name VARCHAR2(20),<br>score NUMBER(10,0),<br>grade varchar2(2));<br><br>INSERT INTO students (id, stu_name, score, grade)<br>VALUES (student_sequence.NEXTVAL, 'Scott', 98,null);<br><br>INSERT INTO students (id, stu_name, score, grade)<br>VALUES (student_sequence.NEXTVAL, 'Margaret', 88,null);<br><br>INSERT INTO students (id, stu_name, score, grade)<br>VALUES (student_sequence.NEXTVAL, 'Joanne', 75,null);<br><br>INSERT INTO students (id, stu_name, score, grade)<br>VALUES (student_sequence.NEXTVAL, 'Manish', 66,null);<br><br><br>update students <br>set grade = <br>case when score &gt; 90 then 'a'<br>when score &gt; 80 then 'b'<br>when score &gt; 70 then 'c'<br>else 'd' end </p>
<p>
<p><strong>oracle的case结构</strong></p>
<p>begin<br>case when 2&lt;1 then<br>dbms_output.put_line('y');<br>else<br>dbms_output.put_line('n');<br>end case;<br>end;<br>/</p>
<p><font face=Verdana>这个case when ... end case 和上边的case when ... end是不同的。</font></p>
</div>
<img src ="http://www.blogjava.net/jacally/aggbug/110379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-04-13 10:55 <a href="http://www.blogjava.net/jacally/articles/110379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL查询语句精华(摘抄)</title><link>http://www.blogjava.net/jacally/articles/105837.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Fri, 23 Mar 2007 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/105837.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/105837.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/105837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/105837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/105837.html</trackback:ping><description><![CDATA[ 
<table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"><tbody><tr><td align="middle" bgcolor="#bbf0ff"><font style="FONT-SIZE: 14pt" color="#000066"><b>SQL查询语句精华使用简要 </b></font></td></tr><tr><td><table style="BORDER-COLLAPSE: collapse" bordercolor="#bbf0ff" cellspacing="1" cellpadding="0" width="100%" border="1"><tbody><tr><td align="middle"><table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="650" border="0"><tbody><tr><td align="middle"><table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td width="650"><div id="art" style="MARGIN: 15px"><div><p>一、 简单查询 <br />　　简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。<br />　　例如，下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。</p><p> 　　SELECT nickname,email<br />　　FROM testtable<br />　　WHERE </p><p>　　(一) 选择列表</p><p>　　选择列表(select_list)指出所查询列，它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。</p><p>　　1、选择所有列</p><p>　　例如，下面语句显示testtable表中所有列的数据：</p><p> 　　SELECT *<br />　　FROM testtable </p><p>　　2、选择部分列并指定它们的显示次序</p><p>　　查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。<br />　　例如：</p><p> 　　SELECT nickname,email<br />　　FROM testtable </p><p>　　3、更改列标题</p><p>　　在选择列表中，可重新指定列标题。定义格式为：<br />　　列标题=列名<br />　　列名 列标题<br />　　如果指定的列标题不是标准的标识符格式时，应使用引号定界符，例如，下列语句使用汉字显示列标题：</p><p> 　　SELECT 昵称=nickname,电子邮件=email<br />　　FROM testtable </p><p>　　4、删除重复行</p><p>　　SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行，默认为ALL。使用DISTINCT选项时，对于所有重复的数据行在SELECT返回的结果集合中只保留一行。</p><p>　　5、限制返回的行数</p><p>　　使用TOP n [PERCENT]选项限制返回的数据行数，TOP n说明返回n行，而TOP n PERCENT时，说明n是表示一百分数，指定返回的行数等于总行数的百分之几。<br />　　例如：</p><p> 　 SELECT TOP 2 *<br />　　FROM testtable<br />　　SELECT TOP 20 PERCENT *<br />　　FROM testtable</p><p>　　(二)FROM子句 </p><p>　　FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图，它们之间用逗号分隔。<br />　　在FROM子句同时指定多个表或视图时，如果选择列表中存在同名列，这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列，在查询两个表中的cityid时应使用下面语句格式加以限定：</p><p> 　  SELECT username,citytable.cityid<br />　　FROM usertable,citytable<br />　　WHERE usertable.cityid=citytable.cityid </p><p>　　在FROM子句中可用以下两种格式为表或视图指定别名：<br />　　表名 as 别名<br />　　表名 别名</p><p>　　(二) FROM子句</p><p>　　FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图，它们之间用逗号分隔。<br />　　在FROM子句同时指定多个表或视图时，如果选择列表中存在同名列，这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列，在查询两个表中的cityid时应使用下面语句格式加以限定：</p><p> 　 SELECT username,citytable.cityid<br />　　FROM usertable,citytable<br />　　WHERE usertable.cityid=citytable.cityid </p><p>　　在FROM子句中可用以下两种格式为表或视图指定别名：<br />　　表名 as 别名<br />　　表名 别名<br />　　例如上面语句可用表的别名格式表示为：</p><p> 　 SELECT username,b.cityid<br />　　FROM usertable a,citytable b<br />　　WHERE a.cityid=b.cityid </p><p>　　SELECT不仅能从表或视图中检索数据，它还能够从其它查询语句所返回的结果集合中查询数据。</p><p>　　例如：</p><p> 　  SELECT a.au_fname+a.au_lname<br />　　FROM authors a,titleauthor ta<br />　　(SELECT title_id,title<br />　　FROM titles<br />　　WHERE ytd_sales&gt;10000<br />　　) AS t<br />　　WHERE a.au_id=ta.au_id<br />　　AND ta.title_id=t.title_id </p><p>　　此例中，将SELECT返回的结果集合给予一别名t，然后再从中检索数据。<br /> </p><p>(三) 使用WHERE子句设置查询条件</p><p>　　WHERE子句设置查询条件，过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据：</p><p> 　 SELECT *<br />　　FROM usertable<br />　　WHERE age&gt;20 </p><p>　　WHERE子句可包括各种条件运算符：<br />　　比较运算符(大小比较)：&gt;、&gt;=、=、&lt;、&lt;=、&lt;&gt;、!&gt;、!&lt;<br />　　范围运算符(表达式值是否在指定的范围)：BETWEEN...AND...<br />　　NOT BETWEEN...AND...<br />　　列表运算符(判断表达式是否为列表中的指定项)：IN (项1,项2......)<br />　　NOT IN (项1,项2......)<br />　　模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE<br />　　空值判断符(判断表达式是否为空)：IS NULL、NOT IS NULL<br />　　逻辑运算符(用于多条件的逻辑连接)：NOT、AND、OR</p><p>　　1、范围运算符例：age BETWEEN 10 AND 30相当于age&gt;=10 AND age&lt;=30<br />　　2、列表运算符例：country IN ('Germany','China')<br />　　3、模式匹配符例：常用于模糊查找，它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。<br />　　可使用以下通配字符：<br />　　百分号%：可匹配任意类型和长度的字符，如果是中文，请使用两个百分号即%%。<br />　　下划线_：匹配单个任意字符，它常用来限制表达式的字符长度。<br />　　方括号[]：指定一个字符、字符串或范围，要求所匹配对象为它们中的任一个。[^]：其取值也[] 相同，但它要求所匹配对象为指定字符以外的任一个字符。<br />　　例如：<br />　　限制以Publishing结尾，使用LIKE '%Publishing'<br />　　限制以A开头：LIKE '[A]%'<br />　　限制以A开头外：LIKE '[^A]%'</p><p>　　4、空值判断符例WHERE age IS NULL</p><p>　　5、逻辑运算符：优先级为NOT、AND、OR</p><p>　　(四)查询结果排序 </p><p>　　使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为：<br />　　ORDER BY {column_name [ASC|DESC]} [,...n]<br />　　其中ASC表示升序，为默认值，DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排<br />　　序。<br />　　例如：</p><p> 　  SELECT *<br />　　FROM usertable<br />　　ORDER BY age desc,userid ASC </p><p>　　另外，可以根据表达式进行排序。</p><p>　　二、 联合查询</p><p>　　UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示，即执行联合查询。UNION的语法格式为：</p><p> 　  select_statement<br />　　UNION [ALL] selectstatement<br />　　[UNION [ALL] selectstatement][...n] </p><p>　　其中selectstatement为待联合的SELECT查询语句。</p><p>　　ALL选项表示将所有行合并到结果集合中。不指定该项时，被联合查询结果集合中的重复行将只保留一行。</p><p>　　联合查询时，查询结果的列标题为第一个查询语句的列标题。因此，要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时，也必须使用第一查询语句中的列名、列标题或者列序号。 </p><p>　　在使用UNION 运算符时，应保证每个联合查询语句的选择列表中有相同数量的表达式，并且每个查询选择表达式应具有相同的数据类型，或是可以自动将它们转换为相同的数据类型。在自动转换时，对于数值类型，系统将低精度的数据类型转换为高精度的数据类型。</p><p>　　在包括多个查询的UNION语句中，其执行顺序是自左至右，使用括号可以改变这一执行顺序。例如：</p><p>　　查询1 UNION (查询2 UNION 查询3)</p><p>　　三、连接查询</p><p>　　通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点，也是它区别于其它类型数据库管理系统的一个标志。</p><p>　　在关系数据库管理系统中，表建立时各数据之间的关系不必确定，常把一个实体的所有信息存放在一个表中。当检索数据时，通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性，他们可以在任何时候增加新的数据类型。为不同实体创建新的表，尔后通过连接进行查询。</p><p>　　连接可以在SELECT 语句的FROM子句或WHERE子句中建立，似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以，在Transact-SQL中推荐使用这种方法。</p><p>　　SQL-92标准所定义的FROM子句的连接语法格式为：</p><p> 　　FROM join_table join_type join_table<br />　　[ON (join_condition)] </p><p>　　其中join_table指出参与连接操作的表名，连接可以对同一个表操作，也可以对多表操作，对同一个表操作的连接又称做自连接。</p><p>　　join_type 指出连接类型，可分为三种：内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作，并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同，内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是，外连接不只列出与连接条件相匹配的行，而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。</p><p>　　交叉连接(CROSS JOIN)没有WHERE 子句，它返回连接表中所有数据行的笛卡尔积，其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。</p><p>　　连接操作中的ON (join_condition) 子句指出连接条件，它由被连接表中的列和比较运算符、逻辑运算符等构成。</p><p>　　无论哪种连接都不能对text、ntext和image数据类型列进行直接连接，但可以对这三种列进行间接连接。例如：</p><p> 　　SELECT p1.pub_id,p2.pub_id,p1.pr_info<br />　　FROM pub_info AS p1 INNER JOIN pub_info AS p2<br />　　ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) </p><p>　　(一)内连接<br />　　内连接查询操作列出与连接条件匹配的数据行，它使用比较运算符比较被连接列的列值。内连接分三种：<br />　　1、等值连接：在连接条件中使用等于号(=)运算符比较被连接列的列值，其查询结果中列出被连接表中的所有列，包括其中的重复列。<br />　　2、不等连接： 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括&gt;、&gt;=、&lt;=、&lt;、!&gt;、!&lt;和&lt;&gt;。<br />　　3、自然连接：在连接条件中使用等于(=)运算符比较被连接列的列值，但它使用选择列表指出查询结果集合中所包括的列，并删除连接表中的重复列。<br />　　例，下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社：</p><p> 　 SELECT *<br />　　FROM authors AS a INNER JOIN publishers AS p<br />　　ON a.city=p.city<br />　　又如使用自然连接，在选择列表中删除authors 和publishers 表中重复列(city和state)：<br />　　SELECT a.*,p.pub_id,p.pub_name,p.country<br />　　FROM authors AS a INNER JOIN publishers AS p<br />　　ON a.city=p.city </p><p>　　(二)外连接<br />　　内连接时，返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时，它返回到查询结果集合中的不仅包含符合连接条件的行，而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来：</p><p> 　 SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b<br />　　ON a.username=b.username </p><p>　　下面使用全外连接将city表中的所有作者以及user表中的所有作者，以及他们所在的城市：</p><p> 　  SELECT a.*,b.*<br />　　FROM city as a FULL OUTER JOIN user as b<br />　　ON a.username=b.username </p><p>　　(三)交叉连接<br />　　交叉连接不带WHERE 子句，它返回被连接的两个表所有数据行的笛卡尔积，返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例，titles表中有6类图书，而publishers表中有8家出版社，则下列交叉连接检索到的记录数将等于6*8=48行。<br />   SELECT type,pub_name<br />　　FROM titles CROSS JOIN publishers<br />　　ORDER BY type<br /></p></div></div></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table><img src ="http://www.blogjava.net/jacally/aggbug/105837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-03-23 14:52 <a href="http://www.blogjava.net/jacally/articles/105837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle函数列表速查 [转]</title><link>http://www.blogjava.net/jacally/articles/95369.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Mon, 22 Jan 2007 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/95369.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/95369.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/95369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/95369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/95369.html</trackback:ping><description><![CDATA[
		<p>PL/SQL单行函数和组函数详解<br />　函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数，这些函数都可被称为SQL或PL/SQL语句，函数主要分为两大类： <br />　　 单行函数</p>
		<p>　　 组函数 </p>
		<p>　　本文将讨论如何利用单行函数以及使用规则。</p>
		<p>　　SQL中的单行函数</p>
		<p>　　SQL和PL/SQL中自带很多类型的函数，有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据，因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中，例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。<br />SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)</p>
		<p>　　单行函数也可以在其他语句中使用，如update的SET子句，INSERT的VALUES子句，DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数，所以我们的注意力也集中在SELECT语句中。</p>
		<p>　　NULL和单行函数</p>
		<p>　　在如何理解NULL上开始是很困难的，就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值，算术操作符的任何一个操作数为NULL值，结果均为提个NULL值,这个规则也适合很多函数，只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的，因为他能直接处理NULL值，NVL有两个参数：NVL(x1,x2),x1和x2都式表达式，当x1为null时返回X2,否则返回x1。</p>
		<p>　　下面我们看看emp数据表它包含了薪水、奖金两项，需要计算总的补偿<br />column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2</p>
		<p>　　不是简单的将薪水和奖金加起来就可以了，如果某一行是null值那么结果就将是null，比如下面的例子：<br />update empset salary=(salary+bonus)*1.1</p>
		<p>　　这个语句中，雇员的工资和奖金都将更新为一个新的值，但是如果没有奖金，即 salary + null,那么就会得出错误的结论，这个时候就要使用nvl函数来排除null值的影响。<br />所以正确的语句是：<br />update empset salary=(salary+nvl(bonus,0)*1.1<br />单行字符串函数</p>
		<p>　　单行字符串函数用于操作字符串数据，他们大多数有一个或多个参数，其中绝大多数返回字符串</p>
		<p>　　ASCII()<br />　　c1是一字符串，返回c1第一个字母的ASCII码，他的逆函数是CHR()<br />SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122</p>
		<p>　　CHR(＜i＞)[NCHAR_CS]<br />　　i是一个数字，函数返回十进制表示的字符<br />select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B</p>
		<p>　　CONCAT(,)<br />　　c1,c2均为字符串，函数将c2连接到c1的后面，如果c1为null,将返回c2.如果c2为null,则返回c1，如果c1、c2都为null，则返回null。他和操作符||返回的结果相同<br />select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda</p>
		<p>　　INITCAP()<br />　　c1为一字符串。函数将每个单词的第一个字母大写其它字母小写返回。单词由空格，控制字符，标点符号限制。<br />select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici</p>
		<p>　　INSTR(,[,＜i＞[,]])<br />　　c1,c2均为字符串，i,j为整数。函数返回c2在c1中第j次出现的位置，搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数，那么搜索将从右到左进行，但是位置的计算还是从左到右，i和j的缺省值为1.<br />select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2</p>
		<p>　　INSTRB(,[,i[,j])<br />　　与INSTR（）函数一样，只是他返回的是字节，对于单字节INSTRB()等于INSTR()</p>
		<p>　　LENGTH()<br />　　c1为字符串，返回c1的长度，如果c1为null，那么将返回null值。<br />select LENGTH('Ipso Facto') ergo from dualergo10</p>
		<p>　　LENGTHb()<br />　　与LENGTH()一样，返回字节。</p>
		<p>　　lower()<br />　　返回c的小写字符，经常出现在where子串中<br />select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite</p>
		<p>　　LPAD(,＜i＞[,])<br />　　c1,c2均为字符串，i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格，参见RPAD。<br />select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe</p>
		<p>　　LTRIM(,)<br />　　把c1中最左边的字符去掉，使其第一个字符不在c2中，如果没有c2，那么c1就不会改变。<br />select LTRIM('Mississippi','Mis') from dualLTRppi</p>
		<p>　　RPAD(,＜i＞[,]) <br />　　在c1的右侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格,其他与LPAD相似</p>
		<p>　　RTRIM(,)<br />　　把c1中最右边的字符去掉，使其第后一个字符不在c2中，如果没有c2，那么c1就不会改变。</p>
		<p>　　REPLACE(,[,])<br />　　c1,c2,c3都是字符串，函数用c3代替出现在c1中的c2后返回。<br />select REPLACE('uptown','up','down') from dualREPLACEdowntown</p>
		<p>　　STBSTR(,＜i＞[,])<br />　　c1为一字符串，i,j为整数，从c1的第i位开始返回长度为j的子字符串，如果j为空，则直到串的尾部。<br />select SUBSTR('Message',1,4) from dualSUBSMess</p>
		<p>　　SUBSTRB(,＜i＞[,])<br />　　与SUBSTR大致相同，只是I,J是以字节计算。</p>
		<p>　　SOUNDEX()<br />　　返回与c1发音相似的词<br />select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250</p>
		<p>　　TRANSLATE(,,)<br />　　将c1中与c2相同的字符以c3代替<br />select TRANSLATE('fumble','uf','ar') test from dualTEXTramble </p>
		<p>　　TRIM([[]] from c3)<br />　　将c3串中的第一个，最后一个，或者都删除。<br />select TRIM(' space padded ') trim from dual TRIMspace padded</p>
		<p>　　UPPER()<br />　　返回c1的大写，常出现where子串中<br />select name from dual where UPPER(name) LIKE 'KI%'NAMEKING<br />单行数字函数</p>
		<p>　　单行数字函数操作数字数据，执行数学和算术运算。所有函数都有数字参数并返回数字值。所有三角函数的操作<br />数和值都是弧度而不是角度，oracle没有提供内建的弧度和角度的转换函数。</p>
		<p>　　ABS()<br />　　返回n的绝对值</p>
		<p>　　ACOS()<br />　　反余玄函数，返回-1到1之间的数。n表示弧度<br />select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0 </p>
		<p>　　ASIN()<br />　　反正玄函数，返回-1到1，n表示弧度</p>
		<p>　　ATAN()<br />　　反正切函数，返回n的反正切值，n表示弧度。</p>
		<p>　　CEIL()<br />　　返回大于或等于n的最小整数。</p>
		<p>　　COS()<br />　　返回n的余玄值，n为弧度</p>
		<p>　　COSH()<br />　　返回n的双曲余玄值，n 为数字。<br />select COSH(&lt;1.4&gt;) FROM dualCOSH(1.4)2.15089847</p>
		<p>　　EXP()<br />　　返回e的n次幂，e=2.71828183.</p>
		<p>　　FLOOR()<br />　　返回小于等于N的最大整数。</p>
		<p>　　LN()<br />　　返回N的自然对数，N必须大于0</p>
		<p>　　LOG(,)<br />　　返回以n1为底n2的对数</p>
		<p>　　MOD()<br />　　返回n1除以n2的余数，</p>
		<p>　　POWER(,)<br />　　返回n1的n2次方</p>
		<p>　　ROUND(,)<br />　　返回舍入小数点右边n2位的n1的值，n2的缺省值为0，这回将小数点最接近的整数，如果n2为负数就舍入到小数点左边相应的位上，n2必须是整数。<br />select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54</p>
		<p>　　SIGN()<br />　　如果n为负数，返回-1,如果n为正数，返回1，如果n=0返回0.</p>
		<p>　　SIN（)<br />　　返回n的正玄值,n为弧度。</p>
		<p>　　SINH()<br />　　返回n的双曲正玄值,n为弧度。</p>
		<p>　　SQRT()<br />　　返回n的平方根,n为弧度</p>
		<p>　　TAN（)<br />　　返回n的正切值,n为弧度</p>
		<p>　　TANH()<br />　　返回n的双曲正切值,n为弧度</p>
		<p>　　TRUNC(,)<br />　　返回截尾到n2位小数的n1的值，n2缺省设置为0，当n2为缺省设置时会将n1截尾为整数，如果n2为负值，就截尾在小数点左边相应的位上。</p>
		<p>　　单行日期函数</p>
		<p>　　单行日期函数操作DATA数据类型，绝大多数都有DATA数据类型的参数，绝大多数返回的也是DATA数据类型的值。</p>
		<p>　　ADD_MONTHS(,＜i＞)<br />　　返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数，那么数据库将隐式的他转换成整数，将会截去小数点后面的部分。</p>
		<p>　　LAST_DAY()<br />　　函数返回包含日期d的月份的最后一天 </p>
		<p>　　MONTHS_BETWEEN(,)<br />　　返回d1和d2之间月的数目,如果d1和d2的日的日期都相同，或者都使该月的最后一天，那么将返回一个整数，否则会返回的结果将包含一个分数。</p>
		<p>　　NEW_TIME(,,)<br />　　d1是一个日期数据类型，当时区tz1中的日期和时间是d时，返回时区tz2中的日期和时间。tz1和tz2时字符串。</p>
		<p>　　NEXT_DAY(,)<br />　　返回日期d后由dow给出的条件的第一天，dow使用当前会话中给出的语言指定了一周中的某一天，返回的时间分量与d的时间分量相同。<br />select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004 </p>
		<p>　　ROUND([,])<br />　　将日期d按照fmt指定的格式舍入，fmt为字符串。</p>
		<p>　　SYADATE<br />　　函数没有参数，返回当前日期和时间。</p>
		<p>　　TRUNC([,]) <br />　　返回由fmt指定的单位的日期d.<br />单行转换函数</p>
		<p>　　单行转换函数用于操作多数据类型，在数据类型之间进行转换。</p>
		<p>　　CHARTORWID()<br />　　c 使一个字符串，函数将c转换为RWID数据类型。<br />SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA') </p>
		<p>　　CONVERT(,[,])<br />　　c尾字符串，dset、sset是两个字符集，函数将字符串c由sset字符集转换为dset字符集，sset的缺省设置为数据库的字符集。</p>
		<p>　　HEXTORAW()<br />　　x为16进制的字符串，函数将16进制的x转换为RAW数据类型。</p>
		<p>　　RAWTOHEX()<br />　　x是RAW数据类型字符串，函数将RAW数据类转换为16进制的数据类型。</p>
		<p>　　ROWIDTOCHAR()<br />　　函数将ROWID数据类型转换为CHAR数据类型。</p>
		<p>　　TO_CHAR([[,)<br />　　x是一个data或number数据类型，函数将x转换成fmt指定格式的char数据类型，如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符，以及货币符号。<br />NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"</p>
		<p>　　TO_DATE([,[,）<br />　　c表示字符串，fmt表示一种特殊格式的字符串。返回按照fmt格式显示的c,nlsparm表示使用的语言。函数将字符串c转换成date数据类型。</p>
		<p>　　TO_MULTI_BYTE()<br />　　c表示一个字符串，函数将c的担子截字符转换成多字节字符。</p>
		<p>　　TO_NUMBER([,[,)<br />　　c表示字符串，fmt表示一个特殊格式的字符串，函数返回值按照fmt指定的格式显示。nlsparm表示语言，函数将返回c代表的数字。</p>
		<p>　　TO_SINGLE_BYTE()<br />　　将字符串c中得多字节字符转化成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用</p>
		<p>　　其它单行函数</p>
		<p>　　BFILENAME( <br />,)<br />　　dir是一个directory类型的对象，file为一文件名。函数返回一个空的BFILE位置值指示符，函数用于初始化BFILE变量或者是BFILE列。</p>
		<p>　　DECODE(,,[,,,[])<br />　　x是一个表达式，m1是一个匹配表达式，x与m1比较，如果m1等于x，那么返回r1,否则,x与m2比较，依次类推m3,m4,m5....直到有返回结果。</p>
		<p>　　DUMP(,[,[,[,]]])<br />　　x是一个表达式或字符，fmt表示8进制、10进制、16进制、或则单字符。函数返回包含了有关x的内部表示信息的VARCHAR2类型的值。如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。</p>
		<p>　　EMPTY_BLOB()<br />　　该函数没有参数，函数返回 一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB列。</p>
		<p>　　EMPTY_CLOB()<br />　　该函数没有参数，函数返回 一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB列。</p>
		<p>　　GREATEST()<br />　　exp_list是一列表达式，返回其中最大的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，那么返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</p>
		<p>　　LEAST()<br />　　exp_list是一列表达式，返回其中最小的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，将返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</p>
		<p>　　UID<br />　　该函数没有参数，返回唯一标示当前数据库用户的整数。</p>
		<p>　　USER<br />　　返回当前用户的用户名</p>
		<p>　　USERENV()<br />　　基于opt返回包含当前会话信息。opt的可选值为：</p>
		<p>　　ISDBA　 　　会话中SYSDBA脚色响应，返回TRUE <br />　　SESSIONID 　返回审计会话标示符</p>
		<p>　ENTRYID 　　返回可用的审计项标示符 <br />　　INSTANCE　　在会话连接后，返回实例标示符。该值只用于运行Parallel 服务器并且有 多个实例的情况下使用。<br />　　LANGUAGE　　返回语言、地域、数据库设置的字符集。<br />　　LANG　　　　返回语言名称的ISO缩写。<br />　　TERMINAL　　为当前会话使用的终端或计算机返回操作系统的标示符。</p>
		<p>　　VSIZE()<br />　　x是一个表达式。返回x内部表示的字节数。<br />SQL中的组函数</p>
		<p>　　组函数也叫集合函数，返回基于多个行的单一结果，行的准确数量无法确定，除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是，在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.</p>
		<p>　　组（多行）函数</p>
		<p>　　与单行函数相比，oracle提供了丰富的基于组的，多行的函数。这些函数可以在select或select的having子句中使用，当用于select子串时常常都和GROUP BY一起使用。</p>
		<p>　　AVG([{DISYINCT|ALL}])<br />　　返回数值的平均值。缺省设置为ALL.<br />SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413</p>
		<p>　　COUNT({*|DISTINCT|ALL} )<br />　　返回查询中行的数目，缺省设置是ALL,*表示返回所有的行。</p>
		<p>　　MAX([{DISTINCT|ALL}])<br />　　返回选择列表项目的最大值，如果x是字符串数据类型，他返回一个VARCHAR2数据类型，如果X是一个DATA数据类型，返回一个日期，如果X是numeric数据类型，返回一个数字。注意distinct和all不起作用，应为最大值与这两种设置是相同的。</p>
		<p>　　MIN([{DISTINCT|ALL}])<br />　　返回选择列表项目的最小值。</p>
		<p>　　STDDEV([{DISTINCT|ALL}])<br />　　返回选者的列表项目的标准差，所谓标准差是方差的平方根。</p>
		<p>　　SUM([{DISTINCT|ALL}])<br />　　返回选择列表项目的数值的总和。</p>
		<p>　　VARIANCE([{DISTINCT|ALL}])<br />　　返回选择列表项目的统计方差。</p>
		<p>　　用GROUP BY给数据分组</p>
		<p>　　正如题目暗示的那样组函数就是操作那些已经分好组的数据，我们告诉数据库用GROUP BY怎样给数据分组或者分类，当我们在SELECT语句的SELECT子句中使用组函数时，我们必须把为分组或非常数列放置在GROUP BY子句中，如果没有用group by进行专门处理，那么缺省的分类是将整个结果设为一类。<br />select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982</p>
		<p>　　在这个例子中，我们用state字段分类；如果我们要将结果按照zip_codes排序,可以用ORDER BY语句，ORDER BY子句可以使用列或组函数。<br />select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982</p>
		<p>　　用HAVING子句限制分组数据</p>
		<p>　　现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数，组函数只能用于两个子串中，组函数不能用于WHERE子串中，例如下面的查询是错误的：<br />错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)&gt;10000 GROUP BY sales_clerk</p>
		<p>　　这个语句中数据库不知道SUM()是什么，当我们需要指示数据库对行分组，然后限制分组后的行的输出时，正确的方法是使用HAVING语句：<br />SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)&gt;10000;</p>
		<p>　　嵌套函数</p>
		<p>　　函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置，函数遵循由内到外，由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF....THEN...ELSE的函数。</p>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/jacally/aggbug/95369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-01-22 16:45 <a href="http://www.blogjava.net/jacally/articles/95369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>