﻿<?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-Thinking in MyLife-文章分类-database</title><link>http://www.blogjava.net/zhangzhong1018/category/21195.html</link><description>study ruby on rails</description><language>zh-cn</language><lastBuildDate>Wed, 01 Aug 2007 19:01:37 GMT</lastBuildDate><pubDate>Wed, 01 Aug 2007 19:01:37 GMT</pubDate><ttl>60</ttl><item><title>debian mysql  remote access </title><link>http://www.blogjava.net/zhangzhong1018/articles/133777.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Wed, 01 Aug 2007 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/133777.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/133777.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/133777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/133777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/133777.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #0000ff">GRANT</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">ALL</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">PRIVILEGES</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">ON</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">.</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">TO</span><span style="COLOR: #000000"> admin</span><span style="COLOR: #008000">@localhost</span><span style="COLOR: #000000"> IDENTIFIED </span><span style="COLOR: #0000ff">BY</span><span style="COLOR: #000000"> </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">something</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">WITH</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">GRANT</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">OPTION</span><span style="COLOR: #000000">;<br><br><span style="COLOR: #0000ff">GRANT</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">ALL</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">PRIVILEGES</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">ON</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">.</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">TO</span><span style="COLOR: #000000"> admin@</span><span style="COLOR: #808080">%</span><span style="COLOR: #000000"> IDENTIFIED </span><span style="COLOR: #0000ff">BY</span><span style="COLOR: #000000"> </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">something</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">WITH</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">GRANT</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">OPTION</span><span style="COLOR: #000000">;<br><br><span style="COLOR: #0000ff">INSERT</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">INTO</span><span style="COLOR: #000000"> </span><span style="COLOR: #ff00ff">user</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">VALUES</span><span style="COLOR: #000000">(</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">localhost</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">admin</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,PASSWORD(</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">something</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">), </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">)<br><br><span style="COLOR: #0000ff">INSERT</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">INTO</span><span style="COLOR: #000000"> </span><span style="COLOR: #ff00ff">user</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">VALUES</span><span style="COLOR: #000000">(</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">%</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">admin</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,PASSWORD(</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">something</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">), </span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">Y</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">)<br><br>第一句增加了一个admin用户授权通过本地机（localhost)访问，密码&#8220;something&#8221;。第二句则是授与admin用户从任何其它主机发起的访问（通配符％）。<br><br>当没有用户 admin&nbsp; mysql 会自动添加此用户</span></span></span></span></p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/133777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-08-01 12:19 <a href="http://www.blogjava.net/zhangzhong1018/articles/133777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql 不错 （http://www.lzbk.com/blog/vista/index.html）</title><link>http://www.blogjava.net/zhangzhong1018/articles/112181.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Fri, 20 Apr 2007 05:39:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/112181.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/112181.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/112181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/112181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/112181.html</trackback:ping><description><![CDATA[<a href="http://lzbk.com/blog/vista/asm.rar"><u><font color=#800080>http://lzbk.com/blog/vista/asm.rar</font></u></a>&nbsp; (asm)<br><br>
<li><span style="COLOR: #ff0000">说明：复制表(只复制结构,源表名：a 新表名：b) </span><br>select * into b from a where 1&lt;&gt;1<br><br>
<li><span style="COLOR: #ff0000">说明：拷贝表(拷贝数据,源表名：a 目标表名：b)</span><br>insert into b(a, b, c) select d,e,f from b;<br><br>
<li><span style="COLOR: #ff0000">说明：显示文章、提交人和最后回复时间</span><br>select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b<br><br>
<li><span style="COLOR: #ff0000">说明：外连接查询(表名1：a 表名2：b)</span><br>select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br><br>
<li><span style="COLOR: #ff0000">说明：日程安排提前五分钟提醒</span><br>select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5<br>
<li><span style="COLOR: #ff0000">说明：-- </span><br>select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&amp;strdepartmentname&amp;"' and 专业名称='"&amp;strprofessionname&amp;"' order by 性别,生源地,高考总成绩
<li><span style="COLOR: #ff0000">一个SQL语句的问题:行列转换</span><br>select * from v_temp<br>上面的视图结果如下:<br>user_&gt;-------------------------<br>系统管理员 管理员 <br>feng 管理员 <br>feng 一般用户 <br>test 一般用户 <br>想把结果变成这样:<br>user_&gt;---------------------------<br>系统管理员 管理员 <br>feng 管理员,一般用户 <br>test 一般用户<br>===================<br>create table a_test(&gt;insert into a_test values('李','管理员')<br>insert into a_test values('张','管理员')<br>insert into a_test values('张','一般用户')<br>insert into a_test values('常','一般用户')<br><br>create function join_str(@content varchar(100))<br>returns varchar(2000)<br>as<br>begin<br>declare @str varchar(2000)<br>set @str=''<br>select @str=@str+','+rtrim(role2) from a_test where [name]=@content<br>select @str=right(@str,len(@str)-1)<br>return @str<br>end<br>go<br><br>--调用：<br>select [name],dbo.join_str([name]) role2 from a_test group by [name]<br><br>--select distinct name,dbo.uf_test(name) from a_test<br><br>
<li><span style="COLOR: #ff0000">快速比较结构相同的两表</span><br>结构相同的两表，一表有记录3万条左右，一表有记录2万条左右，我怎样快速查找两表的不同记录？<br>============================<br>给你一个测试方法，从northwind中的orders表取数据。<br>select * into n1 from orders<br>select * into n2 from orders<br><br>select * from n1<br>select * from n2<br><br>--添加主键，然后修改n1中若干字段的若干条<br>alter table n1 add constraint pk_n1_id primary key (OrderID)<br>alter table n2 add constraint pk_n2_id primary key (OrderID)<br><br>select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) &gt; 1<br><br>应该可以，而且将不同的记录的ID显示出来。<br>下面的适用于双方记录一样的情况，<br><br>select * from n1 where orderid in (select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) &gt; 1) <br>至于双方互不存在的记录是比较好处理的<br>--删除n1,n2中若干条记录<br>delete from n1 where orderID in ('10728','10730')<br>delete from n2 where orderID in ('11000','11001')<br><br>--*************************************************************<br>-- 双方都有该记录却不完全相同<br>select * from n1 where orderid in(select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) &gt; 1)<br>union<br>--n2中存在但在n1中不存的在10728,10730<br>select * from n1 where OrderID not in (select OrderID from n2)<br>union<br>--n1中存在但在n2中不存的在11000,11001<br>select * from n2 where OrderID not in (select OrderID from n1)<br><br>
<li><span style="COLOR: #ff0000">四种方法取表里n到m条纪录：</span><br><br>1.<br>select top m * into 临时表(或表变量) from table&gt;set rowcount n<br>select * from 表变量 order by column&gt;<br><br>2.<br>select top n * from (select top m * from table&gt;<br><br>3.如果tablename里没有其他identity列，那么：<br>select identity(int) id0,* into #temp from tablename<br><br>取n到m条的语句为：<br>select * from #temp where id0 &gt;=n and id0 &lt;= m<br><br>如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行：<br>exec sp_dboption 你的DB名字,'select into/bulkcopy',true<br><br><br>4.如果表里有identity属性，那么简单：<br>select * from table&gt;<br>
<li><span style="COLOR: #ff0000">如何删除一个表中重复的记录？</span><br>create table a_dist(id int,&gt;<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br><br>exec up_distinct 'a_dist','id'<br><br>select * from a_dist<br><br>create procedure up_distinct(@t_&gt;--f_key表示是分组字段﹐即主键字段<br>as<br>begin<br>declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer<br>select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_&gt;exec(@sql)<br>open cur_rows <br>fetch cur_rows into @id,@max <br>while @@fetch_status=0 <br>begin <br>select @max = @max -1 <br>set rowcount @max <br>select @type = xtype from syscolumns where id=object_id(@t_name) and &gt;if @type=56<br>select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id <br>if @type=167<br>select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +'''' <br>exec(@sql)<br>fetch cur_rows into @id,@max <br>end <br>close cur_rows <br>deallocate cur_rows<br>set rowcount 0<br>end<br><br>select * from systypes<br>select * from syscolumns where id = object_id('a_dist')<br><br>
<li><span style="COLOR: #ff0000">查询数据的最大排序问题（只能用一条语句写） </span><br>CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(3, 0)) <br><br>insert into hard values ('A','1',3)<br>insert into hard values ('A','2',4)<br>insert into hard values ('A','4',2)<br>insert into hard values ('A','6',9)<br>insert into hard values ('B','1',4)<br>insert into hard values ('B','2',5)<br>insert into hard values ('B','3',6)<br>insert into hard values ('C','3',4)<br>insert into hard values ('C','6',7)<br>insert into hard values ('C','2',3)<br><br><br>要求查询出来的结果如下：<br><br>qu co je <br>----------- ----------- ----- <br>A 6 9<br>A 2 4<br>B 3 6<br>B 2 5<br>C 6 7<br>C 3 4<br><br><br>就是要按qu分组，每组中取je最大的前2位！！<br>而且只能用一句sql语句！！！<br>select * from hard a where je in (select top 2 je from hard b where a.qu=b.qu order by je) <br><br>
<li><span style="COLOR: #ff0000">求删除重复记录的sql语句？ </span><br>怎样把具有相同字段的纪录删除，只留下一条。<br>例如，表test里有id,name字段<br>如果有name相同的记录 只留下一条，其余的删除。<br>name的内容不定，相同的记录数不定。<br>有没有这样的sql语句？<br>==============================<br>A:一个完整的解决方案：<br><br>将重复的记录记入temp1表:<br>select [标志字段id],count(*) into temp1 from [表名]<br>group by [标志字段id]<br>having count(*)&gt;1<br><br>2、将不重复的记录记入temp1表:<br>insert temp1 select [标志字段id],count(*) from [表名] group by [标志字段id] having count(*)=1<br><br>3、作一个包含所有不重复记录的表：<br>select * into temp2 from [表名] where 标志字段id in(select 标志字段id from temp1)<br><br>4、删除重复表:<br>delete [表名]<br><br>5、恢复表：<br>insert [表名] select * from temp2<br><br>6、删除临时表:<br>drop table temp1<br>drop table temp2<br>================================<br>B:<br>create table a_dist(id int,&gt;<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br>insert into a_dist values(1,'abc')<br><br>exec up_distinct 'a_dist','id'<br><br>select * from a_dist<br><br>create procedure up_distinct(@t_&gt;--f_key表示是分组字段﹐即主键字段<br>as<br>begin<br>declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer<br>select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_&gt;exec(@sql)<br>open cur_rows <br>fetch cur_rows into @id,@max <br>while @@fetch_status=0 <br>begin <br>select @max = @max -1 <br>set rowcount @max <br>select @type = xtype from syscolumns where id=object_id(@t_name) and &gt;if @type=56<br>select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id <br>if @type=167<br>select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +'''' <br>exec(@sql)<br>fetch cur_rows into @id,@max <br>end <br>close cur_rows <br>deallocate cur_rows<br>set rowcount 0<br>end<br><br>select * from systypes<br>select * from syscolumns where id = object_id('a_dist')<br><br>
<li><span style="COLOR: #ff0000">行列转换--普通 </span><br><br>假设有张学生成绩表(CJ)如下 <br>&gt;张三 语文 80 <br>张三 数学 90 <br>张三 物理 85 <br>李四 语文 85 <br>李四 数学 92 <br>李四 物理 82 <br><br>想变成 <br>姓名 语文 数学 物理 <br>张三 80 90 85 <br>李四 85 92 82 <br><br>declare @sql varchar(4000) <br>set @sql = 'select Name' <br>select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']' <br>from (select distinct Subject from CJ) as a <br>select @sql = @sql+' from test group by name' <br>exec(@sql) <br><br>行列转换--合并 <br><br>有表A, <br>id pid <br>1 1 <br>1 2 <br>1 3 <br>2 1 <br>2 2 <br>3 1 <br>如何化成表B: <br>id pid <br>1 1,2,3 <br>2 1,2 <br>3 1 <br><br>创建一个合并的函数 <br>create function fmerg(@id int) <br>returns varchar(8000) <br>as <br>begin <br>declare @str varchar(8000) <br>set @str='' <br>select @str=@str+','+cast(pid as varchar) from 表A where id=@id <br>set @str=right(@str,len(@str)-1) <br>return(@str) <br>End <br>go <br><br>--调用自定义函数得到结果 <br>select distinct id,dbo.fmerg(id) from 表A <br><br>
<li><span style="COLOR: #ff0000">如何取得一个数据表的所有列名 </span><br><br>方法如下：先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。 <br>SQL语句如下： <br>declare @objid int,@obj&gt;set @obj&gt;select @objid = id from sysobjects where id = object_id(@objname) <br>select 'Column_name' = &gt;<br>或<br><br>SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_&gt;<br>
<li><span style="COLOR: #ff0000">通过SQL语句来更改用户的密码 </span><br><br>修改别人的,需要sysadmin role <br>EXEC sp_password NULL, 'newpassword', 'User' <br><br>如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa<br><br>
<li><span style="COLOR: #ff0000">怎么判断出一个表的哪些字段不允许为空？ </span><br><br>select COLUMN_&gt;<br>
<li><span style="COLOR: #ff0000">如何在数据库里找到含有相同字段的表？ </span><br>a. 查已知列名的情况 <br>SELECT b.&gt;From syscolumns a INNER JOIN sysobjects b <br>ON a.id=b.id <br>AND b.type='U' <br>AND a.&gt;<br>
<li><span style="COLOR: #ff0000">未知列名查所有在不同表出现过的列名 </span><br>Select o.&gt;From syscolumns s1, sysobjects o <br>Where s1.id = o.id <br>And o.type = 'U' <br>And Exists ( <br>Select 1 From syscolumns s2 <br>Where s1.&gt;And s1.id &lt;&gt; s2.id <br>) <br><br>
<li><span style="COLOR: #ff0000">查询第xxx行数据 </span><br><br>假设id是主键： <br>select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id) <br><br>如果使用游标也是可以的 <br>fetch absolute [number] from [cursor_name] <br>行数为绝对行数 <br><br>
<li><span style="COLOR: #ff0000">SQL Server日期计算 </span><br>a. 一个月的第一天 <br>SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) <br>b. 本周的星期一 <br>SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) <br>c. 一年的第一天 <br>SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) <br>d. 季度的第一天 <br>SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) <br>e. 上个月的最后一天 <br>SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) <br>f. 去年的最后一天 <br>SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) <br>g. 本月的最后一天 <br>SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) <br>h. 本月的第一个星期一 <br>select DATEADD(wk, DATEDIFF(wk,0, <br>dateadd(dd,6-datepart(day,getdate()),getdate()) <br>), 0) <br>i. 本年的最后一天 <br>SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。</li>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/112181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-20 13:39 <a href="http://www.blogjava.net/zhangzhong1018/articles/112181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计2</title><link>http://www.blogjava.net/zhangzhong1018/articles/107970.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107970.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107970.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107970.html</trackback:ping><description><![CDATA[<span class=oblog_text>数据库的设计有很多技巧，以下就介绍其中的几种，是许多人在大量的数据库分析与设计实践中，逐步总结出来的。对于这些经验的运用，读者不能生帮硬套，死记硬背，而要消化理解，实事求是，灵活掌握。并逐步做到：在应用中发展，在发展中应用。 <br><span class=news-12>
<p>&nbsp;&nbsp;&nbsp; <strong>1. 原始单据与实体之间的关系</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单据对应多个实体，或多张原始单据对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后，对我们设计录入界面大有好处。 </p>
<p>&nbsp;&nbsp;&nbsp; 〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表：员工基本情况表、社会关系表、工作简历表。这就是&#8220;一张原始单据对应多个实体&#8221;的典型例子。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>2. 主键与外键</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 一般而言，一个实体不能既无主键又无外键。在E－R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 </p>
<p>&nbsp;&nbsp;&nbsp; 主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美国数据库设计专家说：&#8220;键，到处都是键，除了键之外，什么也没有&#8221;，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>3. 基本表的性质</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 基本表与中间表、临时表不同，因为它具有如下四个特性： </p>
<p>&nbsp;&nbsp;&nbsp; (1) 原子性。基本表中的字段是不可再分解的。 </p>
<p>&nbsp;&nbsp;&nbsp; (2) 原始性。基本表中的记录是原始数据（基础数据）的记录。 </p>
<p>&nbsp;&nbsp;&nbsp; (3) 演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。 </p>
<p>&nbsp;&nbsp;&nbsp; (4) 稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。 </p>
<p>&nbsp;&nbsp;&nbsp; 理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临时表区分开来。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>4. 范式标准</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 基本表及其字段之间的关系, 应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间换时间的目的。 </p>
<p>&nbsp;&nbsp;&nbsp; 〖例2〗：有一张存放商品的基本表，如表1所示。&#8220;金额&#8221;这个字段的存在，表明该表的设计不满足第三范式，因为&#8220;金额&#8221;可以由&#8220;单价&#8221;乘以&#8220;数量&#8221;得到，说明&#8220;金额&#8221;是冗余字段。但是，增加&#8220;金额&#8221;这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作法。 </p>
<p>&nbsp;&nbsp;&nbsp; 在Rose 2002中，规定列有两种类型：数据列和计算列。&#8220;金额&#8221;这样的列被称为&#8220;计算列&#8221;，而&#8220;单价&#8221;和&#8220;数量&#8221;这样的列被称为&#8220;数据列&#8221;。 </p>
<p>&nbsp;&nbsp;&nbsp; 表1 商品表的表结构 </p>
<p>&nbsp;&nbsp;&nbsp; 商品名称 商品型号 单价 数量 金额 </p>
<p>&nbsp;&nbsp;&nbsp; 电视机 29吋 2,500 40 100,000 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>5. 通俗地理解三个范式</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)： </p>
<p>&nbsp;&nbsp;&nbsp; 第一范式：1NF是对属性的原子性约束，要求属性具有原子性，不可再分解； </p>
<p>&nbsp;&nbsp;&nbsp; 第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一性； </p>
<p>&nbsp;&nbsp;&nbsp; 第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。 </p>
<p>&nbsp;&nbsp;&nbsp; 没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是：在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>6. 要善于识别与正确处理多对多的关系</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。 </p>
<p>&nbsp;&nbsp;&nbsp; 〖例3〗：在&#8220;图书馆信息系统&#8221;中，&#8220;图书&#8221;是一个实体，&#8220;读者&#8221;也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为&#8220;借还书&#8221;，它的属性为：借还时间、借还标志(0表示借书， 1表示还书)，另外，它还应该有两个外键(&#8220;图书&#8221;的主键，&#8220;读者&#8221;的主键)，使它能与&#8220;图书&#8221;和&#8220;读者&#8221;连接。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>7. 主键PK的取值方法</strong> </p>
<p>&nbsp;&nbsp;&nbsp; PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时，建议字段的个数不要太多，多了不但索引占用空间大，而且速度也慢。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>8. 正确认识数据冗余</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 主键与外键在多表中的重复出现, 不属于数据冗余，这个概念必须清楚，事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余！而且是一种低级冗余，即重复性的冗余。高级冗余不是字段的重复出现，而是字段的派生出现。 </p>
<p>&nbsp;&nbsp;&nbsp; 〖例4〗：商品中的&#8220;单价、数量、金额&#8221;三个字段，&#8220;金额&#8221;就是由&#8220;单价&#8221;乘以&#8220;数量&#8221;派生出来的，它就是冗余，而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性，因为同一数据，可能从不同时间、地点、角色上多次录入。因此，我们提倡高级冗余(派生性冗余)，反对低级冗余(重复性冗余)。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>9. E－R图没有标准答案</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 信息系统的E－R图没有标准答案，因为它的设计与画法不是惟一的，只要它覆盖了系统需求的业务范围和功能内容，就是可行的。反之要修改E－R图。尽管它没有惟一的标准答案，并不意味着可以随意设计。好的E－图的标准是：结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>10. 视图技术在数据库设计中很有用</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 与基本表、代码表、中间表不同，视图是一种虚表，它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口，是基表数据综合的一种形式, 是数据处理的一种方法，是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 </p>
<p>&nbsp;&nbsp;&nbsp; 对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统，视图的作用更加重要。这些系统的基本表完成物理设计之后，立即在基本表上建立第一层视图，这层视图的个数和结构，与基本表的个数和结构是完全相同。并且规定，所有的程序员，一律只准在视图上操作。只有数据库管理员，带着多个人员共同掌握的 &#8220;安全钥匙&#8221;，才能直接在基本表上操作。请读者想想：这是为什么？ </p>
<p>&nbsp;&nbsp;&nbsp; <strong>11. 中间表、报表和临时表 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 中间表是存放统计数据的表，它是为数据仓库、输出报表或查询结果而设计的，有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的，存放临时记录，为个人所用。基表和中间表由DBA维护，临时表由程序员自己用程序自动维护。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>12. 完整性约束表现在三个方面</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 域的完整性：用Check来实现约束，在数据库设计工具中，对字段的取值范围进行定义时，有一个Check按钮，通过它定义字段的值城。 </p>
<p>&nbsp;&nbsp;&nbsp; 参照完整性：用PK、FK、表级触发器来实现。 </p>
<p>&nbsp;&nbsp;&nbsp; 用户定义完整性：它是一些业务规则，用存储过程和触发器来实现。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>13. 防止数据库设计打补丁的方法是&#8220;三少原则&#8221;</strong> </p>
<p>&nbsp;&nbsp;&nbsp; (1) 一个数据库中表的个数越少越好。只有表的个数少了，才能说明系统的E－R图少而精，去掉了重复的多余的实体，形成了对客观世界的高度抽象，进行了系统的数据集成，防止了打补丁式的设计； </p>
<p>&nbsp;&nbsp;&nbsp; (2) 一个表中组合主键的字段个数越少越好。因为主键的作用，一是建主键索引，二是做为子表的外键，所以组合主键的字段个数少了，不仅节省了运行时间，而且节省了索引存储空间； </p>
<p>&nbsp;&nbsp;&nbsp; (3) 一个表中的字段个数越少越好。只有字段的个数少了，才能说明在系统中不存在数据重复，且很少有数据冗余，更重要的是督促读者学会&#8220;列变行&#8221;，这样就防止了将子表中的字段拉入到主表中去，在主表中留下许多空余的字段。所谓&#8220;列变行&#8221;，就是将主表中的一部分内容拉出去，另外单独建一个子表。这个方法很简单，有的人就是不习惯、不采纳、不执行。 </p>
<p>&nbsp;&nbsp;&nbsp; 数据库设计的实用原则是：在数据冗余和处理速度之间找到合适的平衡点。&#8220;三少&#8221;是一个整体概念，综合观点，不能孤立某一个原则。该原则是相对的，不是绝对的。&#8220;三多&#8221;原则肯定是错误的。试想：若覆盖系统同样的功能，一百个实体(共一千个属性) 的E－R图，肯定比二百个实体(共二千个属性)的E－R图，要好得多。 </p>
<p>&nbsp;&nbsp;&nbsp; 提倡&#8220;三少&#8221;原则，是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成为应用数据库，将应用数据库集成为主题数据库，将主题数据库集成为全局综合数据库。集成的程度越高，数据共享性就越强，信息孤岛现象就越少，整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。 </p>
<p>&nbsp;&nbsp;&nbsp; 提倡&#8220;三少&#8221;原则的目的，是防止读者利用打补丁技术，不断地对数据库进行增删改，使企业数据库变成了随意设计数据库表的&#8220;垃圾堆&#8221;，或数据库表的&#8220;大杂院&#8221;，最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章，不计其数，导致企事业单位的信息系统无法维护而瘫痪。 </p>
<p>&nbsp;&nbsp;&nbsp; &#8220;三多&#8221;原则任何人都可以做到，该原则是&#8220;打补丁方法&#8221;设计数据库的歪理学说。&#8220;三少&#8221;原则是少而精的原则，它要求有较高的数据库设计技巧与艺术，不是任何人都能做到的，因为该原则是杜绝用&#8220;打补丁方法&#8221;设计数据库的理论依据。 </p>
<p>&nbsp;&nbsp;&nbsp; <strong>14. 提高数据库运行效率的办法 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 在给定的系统硬件和系统软件条件下，提高数据库系统的运行效率的办法是： </p>
<p>&nbsp;&nbsp;&nbsp; (1) 在数据库物理设计时，降低范式，增加冗余, 少用触发器, 多用存储过程。 </p>
<p>&nbsp;&nbsp;&nbsp; (2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条)，复杂计算要先在数据库外面，以文件系统方式用C++语言计算处理完成之后，最后才入库追加到表中去。这是电信计费系统设计的经验。 </p>
<p>&nbsp;&nbsp;&nbsp; (3) 发现某个表的记录太多，例如超过一千万条，则要对该表进行水平分割。水平分割的做法是，以该表主键PK的某个值为界线，将该表的记录水平分割为两个表。若发现某个表的字段太多，例如超过八十个，则垂直分割该表，将原来的一个表分解为两个表。 </p>
<p>&nbsp;&nbsp;&nbsp; (4) 对数据库管理系统DBMS进行系统优化，即优化各种系统参数，如缓冲区个数。 </p>
<p>&nbsp;&nbsp;&nbsp; (5) 在使用面向数据的SQL语言进行程序设计时，尽量采取优化算法。 </p>
<p>&nbsp;&nbsp;&nbsp; 总之，要提高数据库的运行效率，必须从数据库系统级优化、数据库设计级优化、程序实现级优化，这三个层次上同时下功夫。 </p>
</span></span>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:31 <a href="http://www.blogjava.net/zhangzhong1018/articles/107970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计5步骤</title><link>http://www.blogjava.net/zhangzhong1018/articles/107969.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107969.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107969.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107969.html</trackback:ping><description><![CDATA[<span class=oblog_text>&nbsp;
<center><strong><span style="FONT-SIZE: 20px">数据库设计5步骤</span></strong></center><br>
<center>来源：SQL Anywhere User's Guide</center><br>
<center>翻译作者：<a href="http://www.matrix.org.cn/user.shtml?username=Sarkuya" target=_new><u><font color=#0000ff>Sarkuya</font></u></a></center><br><br><span style="COLOR: purple">版权声明</span>：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<br>原文地址:<br><a href="http://www.matrix.org.cn/resource/article/43/43717_Database_Design.html" target=_new><u><font color=#0000ff>http://www.matrix.org.cn/resource/article/43/43717_Database_Design.html</font></u></a><br>关键词： Database Design<br><br><br><strong><span style="FONT-SIZE: 16px">1.确定entities及relationships</span></strong><br><br>a)设计宏观行为。你用此数据库来做什么？比如，希望管理雇员的信息。<br><br>b)确定entities。对于一系列的行为，确定所管理信息所涉及到的主题范围。这将变成table。比如，雇用员工，指定具体部门，确定技能等级。<br><br>c)确定relationships。看着行为，确定tables之间有何种关系。比如，在部门与雇员之间存在一种关系。给这种关系命名。<br><br>d)细化行为。你从宏观行为开始，现在仔细检查这些行为，看有哪些行为能转为微观行为。比如，管理雇员的信息可细化为：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增加新员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改存在员工信息<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除调走的员工<br><br>e)确定业务规则。看着你的业务规则，确定你要采取哪种。比如，可能有这样一种规则，一个部门有且只能有一个部门领导。这些规则将被设计到数据库的结构中。<br><br><strong>范例：</strong><br><br>ACME是一个小公司，在5个地方都设有办事处。当前，有75名员工。公司准备快速扩大规模，划分了9个部门，每个部门都有其领导。<br>为有助于寻求新的员工，人事部门规划了68种技能，为将来人事管理作好准备。员工被招进时，每一种技能的专业等级都被确定。<br><br>定义宏观行为<br>一些ACME公司的宏观行为包括：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;招聘员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解雇员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理员工个人信息<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理公司所需的技能信息<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理哪位员工有哪些技能<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理部门信息<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理办事处信息<br><br><strong>确定entities及relationships</strong><br>我们可以确定要存放信息的主题领域(表)及其关系，并创建一个基于宏观行为及描述的图表。<br>我们用方框来代表table，用菱形代表relationship。我们可以确定哪些relationship是一对多，一对一，及多对多。<br>这是一个E-R草图，以后会细化。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_173919_ZNFIVwdCFt.jpg" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_173919_ZNFIVwdCFt.jpg" onload="javascript :imgLoad(this);" border=0></a><br><br><strong>细化宏观行为</strong><br>以下微观行为基于上面宏观行为而形成：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增加或删除一个员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增加或删除一个办事处<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列出一个部门中的所有员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增加一项技能<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;增加一个员工的一项技能<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定一个员工的技能<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定一个员工每项技能的等级<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定所有拥有相同等级的某项技能的员工<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改员工的技能等级<br><br>这些微观行为可用来确定需要哪些table或relationship。<br><br><strong>确定业务规则</strong><br>业务规则常用于确定一对多，一对一，及多对多关系。<br>相关的业务规则可能有：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在有5个办事处；最多允许扩展到10个。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;员工可以改变部门或办事处<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个部门有一个部门领导<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个办事处至多有3个电话号码<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个电话号码有一个或多个扩展<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;员工被招进时，每一种技能的专业等级都被确定。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每位员工拥有3到20个技能<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;某位员工可能被安排在一个办事处，也可能不安排办事处。<br><br><strong><span style="FONT-SIZE: 16px">2.确定所需数据</span></strong><br><br>要确定所需数据：<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定支持数据<br>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列出所要跟踪的所有数据。描述table(主题)的数据回答这些问题：谁，什么，哪里，何时，以及为什么<br>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为每个table建立数据<br>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列出每个table目前看起来合适的可用数据<br>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为每个relationship设置数据<br>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果有，为每个relationship列出适用的数据<br><br><strong>确定支持数据</strong><br><br>你所确定的支持数据将会成为table中的字段名。比如，下列数据将适用于表Employee，表Skill，表Expert In。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175041_yXNluqNjYB.jpg" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175041_yXNluqNjYB.jpg" onload="javascript :imgLoad(this);" border=0></a><br><br>如果将这些数据画成图表，就像：<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175241_WBxtxZMHKn.jpg" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175241_WBxtxZMHKn.jpg" onload="javascript :imgLoad(this);" border=0></a> <br><br>需要注意：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在确定支持数据时，请一定要参考你之前所确定的宏观行为，以清楚如何利用这些数据。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，如果你知道你需要所有员工的按姓氏排序的列表，确保你将支持数据分解为名字与姓氏，这比简单地提供一个名字会更好。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你所选择的名称最好保持一致性。这将更易于维护数据库，也更易于阅读所输出的报表。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，如果你在某些地方用了一个缩写名称Emp_status，你就不应该在另外一个地方使用全名(Empolyee_ID)。相反，这些名称应当是Emp_status及Emp_id。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据是否与正确的table相对应无关紧要，你可以根据自己的喜好来定。在下节中，你会通过测试对此作出判断。<br><br><strong><span style="FONT-SIZE: 16px">3.标准化数据</span></strong><br><br>标准化是你用以消除数据冗余及确保数据与正确的table或relationship相关联的一系列测试。共有5个测试。本节中，我们将讨论经常使用的3个。<br>关于标准化测试的更多信息，请参考有关数据库设计的书籍。<br><br><strong>标准化格式</strong><br>标准化格式是标准化数据的常用测试方式。你的数据通过第一遍测试后，就被认为是达到第一标准化格式；通过第二遍测试，达到第二标准化格式；通过第三遍测试，达到第三标准化格式。<br><br>如何标准格式：<br>1．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;列出数据<br>2．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为每个表确定至少一个键。每个表必须有一个主键。<br>3．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定relationships的键。relationships的键是连接两个表的键。<br>4．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检查支持数据列表中的计算数据。计算数据通常不保存在数据库中。<br>5．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将数据放在第一遍的标准化格式中：<br>6．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从tables及relationships除去重复的数据。<br>7．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以你所除去数据创建一个或更多的tables及relationships。<br>8．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将数据放在第二遍的标准化格式中：<br>9．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用多于一个以上的键确定tables及relationships。<br>10．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除去只依赖于键一部分的数据。<br>11．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以你所除去数据创建一个或更多的tables及relationships。<br>12．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将数据放在第三遍的标准化格式中：<br>13．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除去那些依赖于tables或relationships中其他数据，并且不是键的数据。<br>14．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以你所除去数据创建一个或更多的tables及relationships。<br><br><strong>数据与键</strong><br>在你开始标准化（测试数据）前，简单地列出数据，并为每张表确定一个唯一的主键。这个键可以由一个字段或几个字段（连锁键）组成。<br><br>主键是一张表中唯一区分各行的一组字段。Employee表的主键是Employee ID字段。Works In relationship中的主键包括Office Code及Employee ID字段。给数据库中每一relationship给出一个键，从其所连接的每一个table中抽取其键产生。<br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175730_SCqTpdKuIw.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" height=450 alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_175730_SCqTpdKuIw.gif" width=425 onload="javascript :imgLoad(this);" border=0></a><br><br><strong>将数据放在第一遍的标准化格式中</strong><br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除去重复的组<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要测试第一遍标准化格式，除去重复的组，并将它们放进他们各自的一张表中。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在下面的例子中，Phone Number可以重复。（一个工作人员可以有多于一个的电话号码。）将重复的组除去，创建一个名为Telephone的新表。在Telephone与 Office创建一个名为Associated With的relationship。<br><br><strong>将数据放在第二遍的标准化格式中</strong><br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除去那些不依赖于整个键的数据。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只看那些有一个以上键的tables及relationships。要测试第二遍标准化格式，除去那些不依赖于整个键的任何数据（组成键的所有字段）。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在此例中，原Employee表有一个由两个字段组成的键。一些数据不依赖于整个键；例如，department name只依赖于其中一个键（Department ID）。因此，Department ID，其他Employee数据并不依赖于它，应移至一个名为Department的新表中，并为Employee及Department建立一个名为 Assigned To的relationship。<br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_180031_HeTLPIcghg.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_180031_HeTLPIcghg.gif" onload="javascript :imgLoad(this);" border=0></a><br><br><strong>将数据放在第三遍的标准化格式中</strong><br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除去那些不直接依赖于键的数据。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要测试第三遍标准化格式，除去那些不是直接依赖于键，而是依赖于其他数据的数据。<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在此例中，原Employee表有依赖于其键（Employee ID）的数据。然而，office location及office phone依赖于其他字段，即Office Code。它们不直接依赖于Employee ID键。将这组数据，包括Office Code，移至一个名为Office的新表中，并为Employee及Office建立一个名为Works In的relationship。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_180505_WtJjZyOTNj.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_180505_WtJjZyOTNj.gif" onload="javascript :imgLoad(this);" border=0></a><br><br><br><br><strong><span style="FONT-SIZE: 16px">4.考量关系</span></strong><br><br>当你完成标准化进程后，你的设计已经差不多完成了。你所需要做的，就是考量关系。<br><br><strong>考量带有数据的关系</strong><br>你的一些relationship可能集含有数据。这经常发生在多对多的关系中。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181032_outKxxhVvf.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181032_outKxxhVvf.gif" onload="javascript :imgLoad(this);" border=0></a><br><br>遇到这种情况，将relationship转化为一个table。relationship的键依旧成为table中的键。<br><br><strong>考量没有数据的关系</strong><br>要实现没有数据的关系，你需要定义外部键。外部键是含有另外一个表中主键的一个或多个字段。外部键使你能同时连接多表数据。<br><br>有一些基本原则能帮助你决定将这些键放在哪里：<br><br><strong>一对多</strong> 在一对多关系中，&#8220;一&#8221;中的主键放在&#8220;多&#8221;中。此例中，外部键放在Employee表中。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181615_awYYuyexSt.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181615_awYYuyexSt.gif" onload="javascript :imgLoad(this);" border=0></a> <br><br><strong>一对一</strong> 在一对一关系中，外部键可以放进任一表中。如果必须要放在某一边，而不能放在另一边，应该放在必须的一边。此例中，外部键（Head ID）在Department表中，因为这是必需的。<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182307_JkrRbRSbXF.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182307_JkrRbRSbXF.gif" onload="javascript :imgLoad(this);" border=0></a><br><br><strong>多对多</strong> 在多对多关系中，用两个外部键来创建一个新表。已存的旧表通过这个新表来发生联系。<br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181712_nhHMnipJRU.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_181712_nhHMnipJRU.gif" onload="javascript :imgLoad(this);" border=0></a><br><br><br><strong><span style="FONT-SIZE: 16px">5.检验设计</span></strong><br><br>在你完成设计之前，你需要确保它满足你的需要。检查你在一开始时所定义的行为，确认你可以获取行为所需要的所有数据：<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你能找到一个路径来等到你所需要的所有信息吗？<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计是否满足了你的需要？<br>●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有需要的数据都可用吗？<br>如果你对以上的问题都回答是，你已经差不多完成设计了。<br><br><strong>最终设计</strong><br>最终设计看起来就像这样：<br><br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182451_DPTYNDsfmg.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182451_DPTYNDsfmg.gif" onload="javascript :imgLoad(this);" border=0></a><br><br><br><strong>设计数据库的表属性</strong><br>数据库设计需要确定有什么表，每张表有什么字段。此节讨论如何指定各字段的属性。<br><br>对于每一字段，你必须决定字段名，数据类型及大小，是否允许NULL值，以及你是否希望数据库限制字段中所允许的值。<br><br><strong>选择字段名</strong><br>字段名可以是字母、数字或符号的任意组合。然而，如果字段名包括了字母、数字或下划线、或并不以字母打头，或者它是个关键字（详见关键字表），那么当使用字段名称时，必须用双引号括起来。<br><br><strong>为字段选择数据类型</strong><br>SQL Anywhere支持的数据类型包括：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整数（int, integer, smallint）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小数（decimal, numeric）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浮点数（float, double）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字符型（char, varchar, long varchar）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二进制数据类型（binary, long binary）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日期/时间类型（date, time, timestamp）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户自定义类型<br><br>关于数据类型的内容，请参见&#8220;SQL Anywhere数据类型&#8221;一节。字段的数据类型影响字段的最大尺寸。例如，如果你指定SMALLINT，此字段可以容纳32,767的整数。 INTEGER可以容纳2,147,483,647的整数。对CHAR来讲，字段的最大值必须指定。<br><br>长二进制的数据类型可用来在数据库中保存例如图像(如位图)或者文字编辑文档。这些类型的信息通常被称为二进制大型对象，或者BLOBS。<br><br>关于每一数据类型的完整描述，见&#8220;SQL Anywhere数据类型&#8221;。<br><br><strong>NULL与NOT NULL</strong><br><br>如果一个字段值是必填的，你就将此字段定义为NOT NULL。否则，字段值可以为NULL值，即可以有空值。SQL中的默认值是允许空值；你应该显示地将字段定义为NOT NULL，除非你有好理由将其设为允许空值。<br><br>关于NULL值的完整描述，请见&#8220;NULL value&#8221;。有关其对比用法，见&#8220;Search conditions&#8221;。<br><br><strong>选择约束</strong><br><br>尽管字段的数据类型限制了能存在字段中的数据（例如，只能存数字或日期），你或许希望更进一步来约束其允许值。<br><br>你可以通过指定一个&#8220;CHECK&#8221;约束来限制任意字段的值。你可以使用能在WHERE子句中出现的任何有效条件来约束被允许的值，尽管大多数CHECK约束使用BETWEEN或IN条件。<br><br><strong>更多信息</strong><br><br>有关有效条件的更多信息，见&#8220;Search conditions&#8221;。有关如何为表及字段指定约束，见&#8220;Ensuring Data Integrity&#8221;。<br><br><strong>例子</strong><br>例子数据库中有一个名为department的表，字段是dept_id, dept_name, dept_head_id。其定义如下：<br><a href="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182652_YiKTlCZqoA.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 style="DISPLAY: inline" onclick="javascript :imgClick(this);" alt=image src="http://www.matrix.org.cn/resource/upload/content/2005_09_05_182652_YiKTlCZqoA.gif" onload="javascript :imgLoad(this);" border=0></a><br><br>注意每一字段都被指定为&#8220;not null&#8221;。这种情况下，表中每一记录的所有字段的数据都必填。<br><br><strong>选择主键及外部键</strong><br>主键是唯一识别表中每一项记录的字段。如何你的表已经正确标准化，主键应当成为数据库设计的一部分。<br>外部键是包含另一表中主键值的一个或一组字段。外部键关系在数据库中建立了一对一及一对多关系。如果你的设计已经正确标准化，外部键应当成为数据库设计的一部分。 </span>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:30 <a href="http://www.blogjava.net/zhangzhong1018/articles/107969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计1</title><link>http://www.blogjava.net/zhangzhong1018/articles/107968.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107968.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107968.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107968.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107968.html</trackback:ping><description><![CDATA[<span class=oblog_text><span style="FONT-SIZE: 12pt">以下是针对事务型数据库： <br><span style="FONT-WEIGHT: bold">1.是否使用联合主键？</span>个人倾向于少采用联合主键。因为这样会降低索引的效率，联合主键一般都要用到至少一个业务字段，往往是字符串型的，而且理论上多字段的索引比单字段的索引要慢些。看上去似乎也不那么清爽。 <br>在实际的设计中，我尽量避免使用联合主键，有些时候&#8220;不得不&#8221;使用联合主键。 <br><br><span style="FONT-WEIGHT: bold">2.PK采用无意义的字段（逻辑主键）还是有意义的字段（业务主键）？</span>个人倾向于&#8220;逻辑主键&#8221;，理由是这样设计出的数据库模型结构清晰、关系脉络清楚，往往更符合&#8220;第三范式&#8221;（虽然不是故意的，呵呵）。而且更容易避开&#8220;联合主键&#8221;，而且可以使用索引效率高的字段类型，比如int、long、number。缺点是用无意义的字段建立表间的关系，使跨表查询增多，效率下降。（矛盾无处不在，前面刚说完可以提高效率，这里马上又降低效率）。&#8220;业务主键&#8221;可以提升查询编码的简洁度和效率。 <br>个人使用实际状况，总体来说&#8220;逻辑主键&#8221;比&#8220;业务主键&#8221;执行效率低，但不会低到无法满足需求。采用&#8220;逻辑主键&#8221;比采用&#8220;业务主键&#8221;更利于数据库模型的结构、关系清晰，也更便于维护。 <br>对于分析型数据库，如数据仓库，千万不要这样做。 <br><br><span style="FONT-WEIGHT: bold">3.不要使用多对多关系？</span>个人倾向于少使用多对多关系。这个问题其实不是数据库设计的问题了，在数据库设计中，多对多关系也仅仅存在于概念模型（E-R）阶段，物理模型不在有多对多关系，实际数据库中也不会有&#8220;多对多&#8221;关系。这是使用ORM时的问题，比如使用Hibernate，多对多关系有时会使编码看起来灵活一些，代价是效率的明显降低。 <br>个人实际使用中，设计时基本不考虑多对多关系，但编码时总会有小组成员使用一些多对多关系，自己建立多对多的ORM，使自己编码方便些，用在数据量小的地方，影响不大。大数据量，则&#8220;禁止使用&#8221;。 <br><br>4.<span style="FONT-WEIGHT: bold">为每个表增加一个state字段？</span>我习惯在设计时给每个表设一个state字段，取值0或1，默认值为1，具体业务意义或操作上的意义可以自定义。可以作为一个状态控制字段，如查询、更新、删除条件，单据是否有效（业务单据对应的表会有业务意义上的&#8220;有/无效&#8221;或&#8220;状态&#8221;字段，这种情况下，我还是会再加一个state字段），甚至仅仅是控制一条数据是否&#8220;有效&#8221;（有效的意义你自己定）。在数据迁移（如转入分析用的数据库）时也可能会发挥作用。 <br><br>5.<span style="FONT-WEIGHT: bold">为每个表设置一些备用字段？</span>没办法，我总是设计不出&#8220;完美&#8221;的数据表，给每个表加几个备用字段（我一般用字符串型，随你）可以应付&#8220;不时之需&#8221;，尤其是需要长期维护的、业务可能有临时性变动的系统。 <br><br>6.<span style="FONT-WEIGHT: bold">尽量不要在一个表中存入其关联表的字段？</span>建议不存！这样做确实可以提高查询效率，但在一个有很多表，并且关联表多的情况下，很难保持数据的一致性！数据库结构也比较糟糕。而且不存，也不会使效率十分低下。 <br><br>7.<span style="FONT-WEIGHT: bold">不要去直接修改数据库？</span>个人认为这点很重要，当需要修改时，应该先去修改模型，然后同步物理数据库，尤其是团队开发，否则要多做更多的事情来搞定，也可能会引入更多的错误。?<br></span></span>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:29 <a href="http://www.blogjava.net/zhangzhong1018/articles/107968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oralce中的to_date()函数</title><link>http://www.blogjava.net/zhangzhong1018/articles/107967.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107967.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107967.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107967.html</trackback:ping><description><![CDATA[<div class=postcontent><font face=Arial size=2>Oralce中的to_date()函数用于将字符串转换为日期对象，具体使用格式为：</font> <em><font face=Arial size=2></font>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><font face=Arial><font size=2><a href="http://www.blogjava.net/Images/OutliningIndicators/None.gif" target=_blank><img onmousewheel="return bbimg(this)" title=点击在新窗口查看原始图片 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" onload="java_script_:if(this.width>500)this.width=500" align=top border=0></a> <span style="COLOR: rgb(0,0,0)">to_date(&nbsp;string,&nbsp;</span> <span style="COLOR: rgb(255,0,0)">[</span> <span style="COLOR: rgb(255,0,0)">&nbsp;format_mask&nbsp;</span> <span style="COLOR: rgb(255,0,0)">]</span> <span style="COLOR: rgb(0,0,0)">,&nbsp;</span> <span style="COLOR: rgb(255,0,0)">[</span> <span style="COLOR: rgb(255,0,0)">&nbsp;nls_language&nbsp;</span> <span style="COLOR: rgb(255,0,0)">]</span> <span style="COLOR: rgb(0,0,0)">&nbsp;)</span> </font></font></div>
<p><font face=Arial size=2><strong>string1</strong> </font></p>
</em><font face=Arial size=2>要转换的字符串.</font>
<p><font face=Arial><font size=2><em><strong>format_mask</strong> </em>可选项，日期转换格式.</font> </font></p>
<p><font face=Arial><font size=2><em><strong>nls_language</strong> </em>可选项. 指定用于转换字符串的nls language.</font> </font></p>
<font face=Arial size=2>其中</font> <font face=Arial><font size=2><em>format_mask</em>主要有以下几种格式：<br></font></font>
<table class=parm_values cellSpacing=0 cellPadding=3 width=365 border=1>
    <tbody>
        <tr class=th_left_top>
            <th width=93><font face=Arial size=2>Format Code </font></th>
            <th><font face=Arial size=2>Explanation </font></th>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>YEAR </font></td>
            <td><font face=Arial size=2>Year, spelled out </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>YYYY </font></td>
            <td><font face=Arial size=2>4-digit year </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>MM </font></td>
            <td><font face=Arial size=2>Month (01-12; JAN = 01). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>MON </font></td>
            <td><font face=Arial size=2>Abbreviated name of month. </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>MONTH </font></td>
            <td><font face=Arial size=2>Name of month, padded with blanks to length of 9 characters. </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>D </font></td>
            <td><font face=Arial size=2>Day of week (1-7). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>DAY </font></td>
            <td><font face=Arial size=2>Name of day. </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>DD </font></td>
            <td><font face=Arial size=2>Day of month (1-31). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>DDD </font></td>
            <td><font face=Arial size=2>Day of year (1-366). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>DY </font></td>
            <td><font face=Arial size=2>Abbreviated name of day. </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>HH </font></td>
            <td><font face=Arial size=2>Hour of day (1-12). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>HH12 </font></td>
            <td><font face=Arial size=2>Hour of day (1-12). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>HH24 </font></td>
            <td><font face=Arial size=2>Hour of day (0-23). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>MI </font></td>
            <td><font face=Arial size=2>Minute (0-59). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>SS </font></td>
            <td><font face=Arial size=2>Second (0-59). </font></td>
        </tr>
        <tr class=tr_left_top>
            <td><font face=Arial size=2>SSSSS </font></td>
            <td><font face=Arial size=2>Seconds past midnight (0-86399). </font></td>
        </tr>
    </tbody>
</table>
<br><font face=Arial><font size=2><strong>[问题]<br></strong><br></font></font><font face=Arial><font size=2><font color=#ff0000>ORA-01810: format code appears twice<br></font>可能是像Java那样指定日期格式，比如：<br></font></font><font face=Arial><font size=2><strong>to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:MM:ss')<br></strong>而在Oracle中的日期格式是不区分大小写的,所以 mm 出现了两次。<br>正确的写法是：<br><strong>to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:mi:ss')</strong><br><br><font color=#ff0000>ORA-01722: invalid number</font><br>可能是指定小时为hh,而hh取值范围是 1-12,所以如果指定小时为 0 点将出现这个异常，比如：<br></font></font><font face=Arial><font size=2><strong>to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh:MM:ss')<br></strong>正确的写法是：<br><strong>to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh24:MM:ss')</strong></font> </font></div>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:28 <a href="http://www.blogjava.net/zhangzhong1018/articles/107967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 存储过程</title><link>http://www.blogjava.net/zhangzhong1018/articles/107965.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107965.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107965.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107965.html</trackback:ping><description><![CDATA[<span class=oblog_text><strong>1.基本结构</strong> <br>CREATE OR REPLACE PROCEDURE 存储过程名字<br>(<br>&nbsp;&nbsp;&nbsp; 参数1 IN NUMBER,<br>&nbsp;&nbsp;&nbsp; 参数2 IN NUMBER<br>) IS<br>变量1 INTEGER :=0;<br>变量2 DATE;<br>BEGIN
<p>END 存储过程名字<br><br><strong>2.SELECT INTO STATEMENT</strong><br>&nbsp; 将select查询的结果存入到变量中，可以同时将多个列存储多个变量中，必须有一条<br>&nbsp; 记录，否则抛出异常(如果没有记录抛出NO_DATA_FOUND)<br>&nbsp; 例子： <br>&nbsp; BEGIN<br>&nbsp; SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;<br>&nbsp; EXCEPTION<br>&nbsp; WHEN NO_DATA_FOUND THEN<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;xxxx;<br>&nbsp; END;<br>&nbsp; ...<br><br><strong>3.IF 判断</strong><br>&nbsp; IF V_TEST=1 THEN<br>&nbsp;&nbsp;&nbsp; BEGIN <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do something<br>&nbsp;&nbsp;&nbsp; END;<br>&nbsp; END IF;<br><br><strong>4.while 循环</strong><br>&nbsp; WHILE V_TEST=1 LOOP<br>&nbsp; BEGIN<br>&nbsp;XXXX<br>&nbsp; END;<br>&nbsp; END LOOP;<br><strong><br>5.变量赋值<br></strong>&nbsp; V_TEST := 123;<br><strong><br>6.用for in 使用cursor</strong><br>&nbsp; ...<br>&nbsp; IS<br>&nbsp; CURSOR cur IS SELECT * FROM xxx;<br>&nbsp; BEGIN<br>&nbsp;FOR cur_result in cur LOOP<br>&nbsp;&nbsp;BEGIN<br>&nbsp;&nbsp;&nbsp;V_SUM :=cur_result.列名1+cur_result.列名2<br>&nbsp;&nbsp;END;<br>&nbsp;END LOOP;<br>&nbsp; END;<br><br><strong>7.带参数的cursor</strong><br>&nbsp; CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;<br>&nbsp; OPEN C_USER(变量值);<br>&nbsp; LOOP<br>&nbsp;FETCH C_USER INTO V_NAME;<br>&nbsp;EXIT FETCH C_USER%NOTFOUND;<br>&nbsp;&nbsp;&nbsp; do something<br>&nbsp; END LOOP;<br>&nbsp; CLOSE C_USER;<br><br><strong>8.用pl/sql developer debug<br></strong>&nbsp; 连接数据库后建立一个Test WINDOW<br>&nbsp; 在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试</p>
</span>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:27 <a href="http://www.blogjava.net/zhangzhong1018/articles/107965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle  日期处理</title><link>http://www.blogjava.net/zhangzhong1018/articles/107964.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107964.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107964.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107964.html</trackback:ping><description><![CDATA[<p><font id=zoom><span id=cmstext>1、转换函数<br>与date操作关系最大的就是两个转换函数：to_date(),to_char()<br>to_date()&nbsp;作用将字符类型按一定格式转化为日期类型：<br>具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串，后者为转换日期格式，注意，前后两者要以一对应。<br>如;to_date('2004-11-27&nbsp;13:34:43',&nbsp;'yyyy-mm-dd&nbsp;hh24:mi:ss')&nbsp;将得到具体的时间<br><br>多种日期格式：<br><br>YYYY：四位表示的年份&nbsp;<br>YYY，YY，Y：年份的最后三位、两位或一位，缺省为当前世纪&nbsp;<br>MM：01~12的月份编号&nbsp;<br>MONTH：九个字符表示的月份，右边用空格填补&nbsp;<br>MON：三位字符的月份缩写&nbsp;<br>WW：一年中的星期&nbsp;<br>D：星期中的第几天&nbsp;<br>DD：月份中的第几天&nbsp;<br>DDD：年所中的第几天&nbsp;<br>DAY：九个字符表示的天的全称，右边用空格补齐&nbsp;<br>HH，HH12：一天中的第几个小时，12进制表示法&nbsp;<br>HH24：一天中的第几个小时，取值为00~23&nbsp;<br>MI：一小时中的分钟&nbsp;<br>SS：一分钟中的秒&nbsp;<br>SSSS：从午夜开始过去的秒数&nbsp;<br><br>to_char():将日期转按一定格式换成字符类型<br>SQL&gt;&nbsp;select&nbsp;to_char(sysdate,'yyyy-mm-dd&nbsp;hh24:mi:ss')&nbsp;time&nbsp;from&nbsp;dual;<br><br>TIME<br>-------------------<br>2004-10-08&nbsp;15:22:58<br><br>即把当前时间按yyyy-mm-dd&nbsp;hh24:mi:ss格式转换成字符类型<br><br>在oracle中处理日期大全&nbsp;<br><br>&nbsp;&nbsp;TO_DATE格式&nbsp;&nbsp;<br>Day:&nbsp;&nbsp;<br>dd&nbsp;number&nbsp;12&nbsp;&nbsp;<br>dy&nbsp;abbreviated&nbsp;fri&nbsp;&nbsp;<br>day&nbsp;spelled&nbsp;out&nbsp;friday&nbsp;&nbsp;<br>ddspth&nbsp;spelled&nbsp;out,&nbsp;ordinal&nbsp;twelfth&nbsp;&nbsp;<br>Month:&nbsp;&nbsp;<br>mm&nbsp;number&nbsp;03&nbsp;&nbsp;<br>mon&nbsp;abbreviated&nbsp;mar&nbsp;&nbsp;<br>month&nbsp;spelled&nbsp;out&nbsp;march&nbsp;&nbsp;<br>Year:&nbsp;&nbsp;<br>yy&nbsp;two&nbsp;digits&nbsp;98&nbsp;&nbsp;<br>yyyy&nbsp;four&nbsp;digits&nbsp;1998&nbsp;&nbsp;<br><br>24小时格式下时间范围为：&nbsp;0:00:00&nbsp;-&nbsp;23:59:59....&nbsp;&nbsp;<br>12小时格式下时间范围为：&nbsp;1:00:00&nbsp;-&nbsp;12:59:59&nbsp;....&nbsp;&nbsp;<br><br>[ZT]日期和??函???<br>1.&nbsp;&nbsp;<br>日期和字符转换函数用法（to_date,to_char）&nbsp;&nbsp;<br><br>2.&nbsp;&nbsp;<br>select&nbsp;to_char(&nbsp;to_date(222,'J'),'Jsp')&nbsp;from&nbsp;dual&nbsp;&nbsp;<br><br>显示Two&nbsp;Hundred&nbsp;Twenty-Two&nbsp;&nbsp;<br><br>3.&nbsp;&nbsp;<br>求某天是星期几&nbsp;&nbsp;<br>select&nbsp;to_char(to_date('2002-08-26','yyyy-mm-dd'),'day')&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br>星期一&nbsp;&nbsp;<br>select&nbsp;to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE&nbsp;=&nbsp;American')&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br>monday&nbsp;&nbsp;<br>设置日期语言&nbsp;&nbsp;<br>ALTER&nbsp;SESSION&nbsp;SET&nbsp;NLS_DATE_LANGUAGE='AMERICAN';&nbsp;&nbsp;<br>也可以这样&nbsp;&nbsp;<br>TO_DATE&nbsp;('2002-08-26',&nbsp;'YYYY-mm-dd',&nbsp;'NLS_DATE_LANGUAGE&nbsp;=&nbsp;American')&nbsp;&nbsp;<br><br>4.&nbsp;&nbsp;<br>两个日期间的天数&nbsp;&nbsp;<br>select&nbsp;floor(sysdate&nbsp;-&nbsp;to_date('20020405','yyyymmdd'))&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br><br>5.&nbsp;时间为null的用法&nbsp;&nbsp;<br>select&nbsp;id,&nbsp;active_date&nbsp;from&nbsp;table1&nbsp;&nbsp;<br>UNION&nbsp;&nbsp;<br>select&nbsp;1,&nbsp;TO_DATE(null)&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br><br>注意要用TO_DATE(null)&nbsp;&nbsp;<br><br>6.&nbsp;&nbsp;<br>a_date&nbsp;between&nbsp;to_date('20011201','yyyymmdd')&nbsp;and&nbsp;to_date('20011231','yyyymmdd')&nbsp;&nbsp;<br>那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。&nbsp;&nbsp;<br>所以，当时间需要精确的时候，觉得to_char还是必要的&nbsp;&nbsp;<br>7.&nbsp;日期格式冲突问题&nbsp;&nbsp;<br>输入的格式要看你安装的ORACLE字符集的类型,&nbsp;比如:&nbsp;US7ASCII,&nbsp;date格式的类型就是:&nbsp;'01-Jan-01'&nbsp;&nbsp;<br>alter&nbsp;system&nbsp;set&nbsp;NLS_DATE_LANGUAGE&nbsp;=&nbsp;American&nbsp;&nbsp;<br>alter&nbsp;session&nbsp;set&nbsp;NLS_DATE_LANGUAGE&nbsp;=&nbsp;American&nbsp;&nbsp;<br>或者在to_date中写&nbsp;&nbsp;<br>select&nbsp;to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE&nbsp;=&nbsp;American')&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br>注意我这只是举了NLS_DATE_LANGUAGE，当然还有很多，&nbsp;&nbsp;<br>可查看&nbsp;&nbsp;<br>select&nbsp;*&nbsp;from&nbsp;nls_session_parameters&nbsp;&nbsp;<br>select&nbsp;*&nbsp;from&nbsp;V$NLS_PARAMETERS&nbsp;&nbsp;<br><br>8.&nbsp;&nbsp;<br>select&nbsp;count(*)&nbsp;&nbsp;<br>from&nbsp;(&nbsp;select&nbsp;rownum-1&nbsp;rnum&nbsp;&nbsp;<br>from&nbsp;all_objects&nbsp;&nbsp;<br>where&nbsp;rownum&nbsp;&lt;=&nbsp;to_date('2002-02-28','yyyy-mm-dd')&nbsp;-&nbsp;to_date('2002-&nbsp;&nbsp;<br>02-01','yyyy-mm-dd')+1&nbsp;&nbsp;<br>)&nbsp;&nbsp;<br>where&nbsp;to_char(&nbsp;to_date('2002-02-01','yyyy-mm-dd')+rnum-1,&nbsp;'D'&nbsp;)&nbsp;&nbsp;<br>not&nbsp;&nbsp;<br>in&nbsp;(&nbsp;'1',&nbsp;'7'&nbsp;)&nbsp;&nbsp;<br><br>查找2002-02-28至2002-02-01间除星期一和七的天数&nbsp;&nbsp;<br>在前后分别调用DBMS_UTILITY.GET_TIME,&nbsp;让后将结果相减(得到的是1/100秒,&nbsp;而不是毫秒).&nbsp;&nbsp;<br><br>9.&nbsp;&nbsp;<br>select&nbsp;months_between(to_date('01-31-1999','MM-DD-YYYY'),&nbsp;&nbsp;<br>to_date('12-31-1998','MM-DD-YYYY'))&nbsp;"MONTHS"&nbsp;FROM&nbsp;DUAL;&nbsp;&nbsp;<br>1&nbsp;&nbsp;<br><br>select&nbsp;months_between(to_date('02-01-1999','MM-DD-YYYY'),&nbsp;&nbsp;<br>to_date('12-31-1998','MM-DD-YYYY'))&nbsp;"MONTHS"&nbsp;FROM&nbsp;DUAL;&nbsp;&nbsp;<br><br>1.03225806451613&nbsp;&nbsp;<br>10.&nbsp;Next_day的用法&nbsp;&nbsp;<br>Next_day(date,&nbsp;day)&nbsp;&nbsp;<br><br>Monday-Sunday,&nbsp;for&nbsp;format&nbsp;code&nbsp;DAY&nbsp;&nbsp;<br>Mon-Sun,&nbsp;for&nbsp;format&nbsp;code&nbsp;DY&nbsp;&nbsp;<br>1-7,&nbsp;for&nbsp;format&nbsp;code&nbsp;D&nbsp;&nbsp;<br><br>11&nbsp;&nbsp;<br>select&nbsp;to_char(sysdate,'hh:mi:ss')&nbsp;TIME&nbsp;from&nbsp;all_objects&nbsp;&nbsp;<br>注意：第一条记录的TIME&nbsp;与最后一行是一样的&nbsp;&nbsp;<br>可以建立一个函数来处理这个问题&nbsp;&nbsp;<br>create&nbsp;or&nbsp;replace&nbsp;function&nbsp;sys_date&nbsp;return&nbsp;date&nbsp;is&nbsp;&nbsp;<br>begin&nbsp;&nbsp;<br>return&nbsp;sysdate;&nbsp;&nbsp;<br>end;&nbsp;&nbsp;<br><br>select&nbsp;to_char(sys_date,'hh:mi:ss')&nbsp;from&nbsp;all_objects;&nbsp;&nbsp;<br>12.&nbsp;&nbsp;<br>获得小时数&nbsp;&nbsp;<br><br>SELECT&nbsp;EXTRACT(HOUR&nbsp;FROM&nbsp;TIMESTAMP&nbsp;'2001-02-16&nbsp;2:38:40')&nbsp;from&nbsp;offer&nbsp;&nbsp;<br>SQL&gt;&nbsp;select&nbsp;sysdate&nbsp;,to_char(sysdate,'hh')&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br><br>SYSDATE&nbsp;TO_CHAR(SYSDATE,'HH')&nbsp;&nbsp;<br>--------------------&nbsp;---------------------&nbsp;&nbsp;<br>2003-10-13&nbsp;19:35:21&nbsp;07&nbsp;&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;sysdate&nbsp;,to_char(sysdate,'hh24')&nbsp;from&nbsp;dual;&nbsp;&nbsp;<br><br>SYSDATE&nbsp;TO_CHAR(SYSDATE,'HH24')&nbsp;&nbsp;<br>--------------------&nbsp;-----------------------&nbsp;&nbsp;<br>2003-10-13&nbsp;19:35:21&nbsp;19&nbsp;&nbsp;<br><br>获取年月日与此类似&nbsp;&nbsp;<br>13.&nbsp;&nbsp;<br>年月日的处理&nbsp;&nbsp;<br>select&nbsp;older_date,&nbsp;&nbsp;<br>newer_date,&nbsp;&nbsp;<br>years,&nbsp;&nbsp;<br>months,&nbsp;&nbsp;<br>abs(&nbsp;&nbsp;<br>trunc(&nbsp;&nbsp;<br>newer_date-&nbsp;&nbsp;<br>add_months(&nbsp;older_date,years*12+months&nbsp;)&nbsp;&nbsp;<br>)&nbsp;&nbsp;<br>)&nbsp;days&nbsp;&nbsp;<br>from&nbsp;(&nbsp;select&nbsp;&nbsp;<br>trunc(months_between(&nbsp;newer_date,&nbsp;older_date&nbsp;)/12)&nbsp;YEARS,&nbsp;&nbsp;<br>mod(trunc(months_between(&nbsp;newer_date,&nbsp;older_date&nbsp;)),&nbsp;&nbsp;<br>12&nbsp;)&nbsp;MONTHS,&nbsp;&nbsp;<br>newer_date,&nbsp;&nbsp;<br>older_date&nbsp;&nbsp;<br>from&nbsp;(&nbsp;select&nbsp;hiredate&nbsp;older_date,&nbsp;&nbsp;<br>add_months(hiredate,rownum)+rownum&nbsp;newer_date&nbsp;&nbsp;<br>from&nbsp;emp&nbsp;)&nbsp;&nbsp;<br>)&nbsp;&nbsp;<br><br>14.&nbsp;&nbsp;<br>处理月份天数不定的办法&nbsp;&nbsp;<br>select&nbsp;to_char(add_months(last_day(sysdate)&nbsp;+1,&nbsp;-2),&nbsp;'yyyymmdd'),last_day(sysdate)&nbsp;from&nbsp;dual&nbsp;&nbsp;<br><br>16.&nbsp;&nbsp;<br>找出今年的天数&nbsp;&nbsp;<br>select&nbsp;add_months(trunc(sysdate,'year'),&nbsp;12)&nbsp;-&nbsp;trunc(sysdate,'year')&nbsp;from&nbsp;dual&nbsp;&nbsp;<br><br>闰年的处理方法&nbsp;&nbsp;<br>to_char(&nbsp;last_day(&nbsp;to_date('02'&nbsp;||&nbsp;:year,'mmyyyy')&nbsp;),&nbsp;'dd'&nbsp;)&nbsp;&nbsp;<br>如果是28就不是闰年&nbsp;&nbsp;<br><br>17.&nbsp;&nbsp;<br>yyyy与rrrr的区别&nbsp;&nbsp;<br>'YYYY99&nbsp;TO_C&nbsp;&nbsp;<br>-------&nbsp;----&nbsp;&nbsp;<br>yyyy&nbsp;99&nbsp;0099&nbsp;&nbsp;<br>rrrr&nbsp;99&nbsp;1999&nbsp;&nbsp;<br>yyyy&nbsp;01&nbsp;0001&nbsp;&nbsp;<br>rrrr&nbsp;01&nbsp;2001&nbsp;&nbsp;<br><br>18.不同时区的处理&nbsp;&nbsp;<br>select&nbsp;to_char(&nbsp;NEW_TIME(&nbsp;sysdate,&nbsp;'GMT','EST'),&nbsp;'dd/mm/yyyy&nbsp;hh:mi:ss')&nbsp;,sysdate&nbsp;&nbsp;<br>from&nbsp;dual;&nbsp;&nbsp;<br><br>19.&nbsp;&nbsp;<br>5秒钟一个间隔&nbsp;&nbsp;<br>Select&nbsp;TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300)&nbsp;*&nbsp;300,'SSSSS')&nbsp;,TO_CHAR(sysdate,'SSSSS')&nbsp;&nbsp;<br>from&nbsp;dual&nbsp;&nbsp;<br><br>2002-11-1&nbsp;9:55:00&nbsp;35786&nbsp;&nbsp;<br>SSSSS表示5位秒数&nbsp;&nbsp;<br><br>20.&nbsp;&nbsp;<br>一年的第几天&nbsp;&nbsp;<br>select&nbsp;TO_CHAR(SYSDATE,'DDD'),sysdate&nbsp;from&nbsp;dual&nbsp;&nbsp;<br>310&nbsp;2002-11-6&nbsp;10:03:51&nbsp;&nbsp;<br><br>21.计算小时,分,秒,毫秒&nbsp;&nbsp;<br>select&nbsp;&nbsp;<br>Days,&nbsp;&nbsp;<br>A,&nbsp;&nbsp;<br>TRUNC(A*24)&nbsp;Hours,&nbsp;&nbsp;<br>TRUNC(A*24*60&nbsp;-&nbsp;60*TRUNC(A*24))&nbsp;Minutes,&nbsp;&nbsp;<br>TRUNC(A*24*60*60&nbsp;-&nbsp;60*TRUNC(A*24*60))&nbsp;Seconds,&nbsp;&nbsp;<br>TRUNC(A*24*60*60*100&nbsp;-&nbsp;100*TRUNC(A*24*60*60))&nbsp;mSeconds&nbsp;&nbsp;<br>from&nbsp;&nbsp;<br>(&nbsp;&nbsp;<br>select&nbsp;&nbsp;<br>trunc(sysdate)&nbsp;Days,&nbsp;&nbsp;<br>sysdate&nbsp;-&nbsp;trunc(sysdate)&nbsp;A&nbsp;&nbsp;<br>from&nbsp;dual&nbsp;&nbsp;<br>)&nbsp;&nbsp;<br><br><br><br>select&nbsp;*&nbsp;from&nbsp;tabname&nbsp;&nbsp;<br>order&nbsp;by&nbsp;decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');&nbsp;&nbsp;<br><br>//&nbsp;&nbsp;<br>floor((date2-date1)&nbsp;/365)&nbsp;作为年&nbsp;&nbsp;<br>floor((date2-date1,&nbsp;365)&nbsp;/30)&nbsp;作为月&nbsp;&nbsp;<br>mod(mod(date2-date1,&nbsp;365),&nbsp;30)作为日.&nbsp;&nbsp;<br>23.next_day函数&nbsp;&nbsp;<br>next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。&nbsp;&nbsp;<br>1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;&nbsp;<br>日&nbsp;一&nbsp;二&nbsp;三&nbsp;四&nbsp;五&nbsp;六<br><br>oracle中有很多关于日期的函数<br><br>在oracle中有很多关于日期的函数，如：&nbsp;<br>1、add_months()用于从一个日期值增加或减少一些月份&nbsp;<br>date_value:=add_months(date_value,number_of_months)&nbsp;<br>例：&nbsp;<br>SQL&gt;&nbsp;select&nbsp;add_months(sysdate,12)&nbsp;"Next&nbsp;Year"&nbsp;from&nbsp;dual;&nbsp;<br><br>Next&nbsp;Year&nbsp;<br>----------&nbsp;<br>13-11月-04&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;add_months(sysdate,112)&nbsp;"Last&nbsp;Year"&nbsp;from&nbsp;dual;&nbsp;<br><br>Last&nbsp;Year&nbsp;<br>----------&nbsp;<br>13-3月&nbsp;-13&nbsp;<br><br>SQL&gt;&nbsp;<br><br>2、current_date()返回当前会放时区中的当前日期&nbsp;<br>date_value:=current_date&nbsp;<br>SQL&gt;&nbsp;column&nbsp;sessiontimezone&nbsp;for&nbsp;a15&nbsp;<br>SQL&gt;&nbsp;select&nbsp;sessiontimezone,current_date&nbsp;from&nbsp;dual;&nbsp;<br><br>SESSIONTIMEZONE&nbsp;CURRENT_DA&nbsp;<br>---------------&nbsp;----------&nbsp;<br>+08:00&nbsp;13-11月-03&nbsp;<br><br>SQL&gt;&nbsp;alter&nbsp;session&nbsp;set&nbsp;time_zone='-11:00'&nbsp;<br>&nbsp;&nbsp;2&nbsp;/&nbsp;<br><br>会话已更改。&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;sessiontimezone,current_timestamp&nbsp;from&nbsp;dual;&nbsp;<br><br>SESSIONTIMEZONE&nbsp;CURRENT_TIMESTAMP&nbsp;<br>---------------&nbsp;------------------------------------&nbsp;<br>-11:00&nbsp;12-11月-03&nbsp;04.59.13.668000&nbsp;下午&nbsp;-11:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;<br><br>SQL&gt;&nbsp;<br><br>3、current_timestamp()以timestamp&nbsp;with&nbsp;time&nbsp;zone数据类型返回当前会放时区中的当前日期&nbsp;<br>timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])&nbsp;<br>SQL&gt;&nbsp;column&nbsp;sessiontimezone&nbsp;for&nbsp;a15&nbsp;<br>SQL&gt;&nbsp;column&nbsp;current_timestamp&nbsp;format&nbsp;a36&nbsp;<br>SQL&gt;&nbsp;select&nbsp;sessiontimezone,current_timestamp&nbsp;from&nbsp;dual;&nbsp;<br><br>SESSIONTIMEZONE&nbsp;CURRENT_TIMESTAMP&nbsp;<br>---------------&nbsp;------------------------------------&nbsp;<br>+08:00&nbsp;13-11月-03&nbsp;11.56.28.160000&nbsp;上午&nbsp;+08:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;<br><br>SQL&gt;&nbsp;alter&nbsp;session&nbsp;set&nbsp;time_zone='-11:00'&nbsp;<br>&nbsp;&nbsp;2&nbsp;/&nbsp;<br><br>会话已更改。&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;sessiontimezone,current_timestamp&nbsp;from&nbsp;dual;&nbsp;<br><br>SESSIONTIMEZONE&nbsp;CURRENT_TIMESTAMP&nbsp;<br>---------------&nbsp;------------------------------------&nbsp;<br>-11:00&nbsp;12-11月-03&nbsp;04.58.00.243000&nbsp;下午&nbsp;-11:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;<br><br>SQL&gt;&nbsp;<br><br>4、dbtimezone()返回时区&nbsp;<br>varchar_value:=dbtimezone&nbsp;<br>SQL&gt;&nbsp;select&nbsp;dbtimezone&nbsp;from&nbsp;dual;&nbsp;<br><br>DBTIME&nbsp;<br>------&nbsp;<br>-07:00&nbsp;<br><br>SQL&gt;&nbsp;<br><br>5、extract()找出日期或间隔值的字段值&nbsp;<br>date_value:=extract(date_field&nbsp;from&nbsp;[datetime_value|interval_value])&nbsp;<br>SQL&gt;&nbsp;select&nbsp;extract(month&nbsp;from&nbsp;sysdate)&nbsp;"This&nbsp;Month"&nbsp;from&nbsp;dual;&nbsp;<br><br>This&nbsp;Month&nbsp;<br>----------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;extract(year&nbsp;from&nbsp;add_months(sysdate,36))&nbsp;"3&nbsp;Years&nbsp;Out"&nbsp;from&nbsp;dual;&nbsp;<br><br>3&nbsp;Years&nbsp;Out&nbsp;<br>-----------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2006&nbsp;<br><br>SQL&gt;&nbsp;<br><br>6、last_day()返回包含了日期参数的月份的最后一天的日期&nbsp;<br>date_value:=last_day(date_value)&nbsp;<br>SQL&gt;&nbsp;select&nbsp;last_day(date'2000-02-01')&nbsp;"Leap&nbsp;Yr?"&nbsp;from&nbsp;dual;&nbsp;<br><br>Leap&nbsp;Yr?&nbsp;<br>----------&nbsp;<br>29-2月&nbsp;-00&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;last_day(sysdate)&nbsp;"Last&nbsp;day&nbsp;of&nbsp;this&nbsp;month"&nbsp;from&nbsp;dual;&nbsp;<br><br>Last&nbsp;day&nbsp;o&nbsp;<br>----------&nbsp;<br>30-11月-03&nbsp;<br><br>SQL&gt;&nbsp;<br><br>7、localtimestamp()返回会话中的日期和时间&nbsp;<br>timestamp_value:=localtimestamp&nbsp;<br>SQL&gt;&nbsp;column&nbsp;localtimestamp&nbsp;format&nbsp;a28&nbsp;<br>SQL&gt;&nbsp;select&nbsp;localtimestamp&nbsp;from&nbsp;dual;&nbsp;<br><br>LOCALTIMESTAMP&nbsp;<br>----------------------------&nbsp;<br>13-11月-03&nbsp;12.09.15.433000&nbsp;<br>下午&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;localtimestamp,current_timestamp&nbsp;from&nbsp;dual;&nbsp;<br><br>LOCALTIMESTAMP&nbsp;CURRENT_TIMESTAMP&nbsp;<br>----------------------------&nbsp;------------------------------------&nbsp;<br>13-11月-03&nbsp;12.09.31.006000&nbsp;13-11月-03&nbsp;12.09.31.006000&nbsp;下午&nbsp;+08:&nbsp;<br>下午&nbsp;00&nbsp;<br><br>SQL&gt;&nbsp;alter&nbsp;session&nbsp;set&nbsp;time_zone='-11:00';&nbsp;<br><br>会话已更改。&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;localtimestamp,to_char(sysdate,'DD-MM-YYYY&nbsp;HH:MI:SS&nbsp;AM')&nbsp;"SYSDATE"&nbsp;from&nbsp;dual;&nbsp;<br><br>LOCALTIMESTAMP&nbsp;SYSDATE&nbsp;<br>----------------------------&nbsp;------------------------&nbsp;<br>12-11月-03&nbsp;05.11.31.259000&nbsp;13-11-2003&nbsp;12:11:31&nbsp;下午&nbsp;<br>下午&nbsp;<br><br>SQL&gt;&nbsp;<br><br>8、months_between()判断两个日期之间的月份数量&nbsp;<br>number_value:=months_between(date_value,date_value)&nbsp;<br>SQL&gt;&nbsp;select&nbsp;months_between(sysdate,date'1971-05-18')&nbsp;from&nbsp;dual;&nbsp;<br><br>MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')&nbsp;<br>----------------------------------------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;389.855143&nbsp;<br><br>SQL&gt;&nbsp;select&nbsp;months_between(sysdate,date'2001-01-01')&nbsp;from&nbsp;dual;&nbsp;<br><br>MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')&nbsp;<br>----------------------------------------&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;34.4035409&nbsp;<br><br>SQL&gt;&nbsp;<br><br>9、next_day()给定一个日期值，返回由第二个参数指出的日子第一次出现在的日期值（应返回相应日子的名称字符串）<br><br>?周相?日期函?<br><br>1.查询某周的第一天<br>select&nbsp;trunc(decode(ww,&nbsp;53,&nbsp;to_date(yy&nbsp;||&nbsp;'3112',&nbsp;'yyyyddmm'),&nbsp;to_date(yy&nbsp;||&nbsp;'-'&nbsp;||&nbsp;to_char(ww&nbsp;*&nbsp;7),&nbsp;'yyyy-ddd')),&nbsp;'d')&nbsp;last_day<br>from&nbsp;(select&nbsp;substr('2004-32',&nbsp;1,&nbsp;4)&nbsp;yy,&nbsp;to_number(substr('2004-32',&nbsp;6))&nbsp;ww<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dual)<br><br>select&nbsp;trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6&nbsp;first_day&nbsp;from&nbsp;dual<br><br>select&nbsp;min(v_date)&nbsp;from<br>&nbsp;&nbsp;(select&nbsp;(to_date('200201','yyyymm')&nbsp;+&nbsp;rownum)&nbsp;v_date<br>&nbsp;&nbsp;from&nbsp;all_tables<br>&nbsp;&nbsp;where&nbsp;rownum&nbsp;&lt;&nbsp;370)<br>where&nbsp;to_char(v_date,'yyyy-iw')&nbsp;=&nbsp;'2002-49'<br><br>2.查询某周的最后一天<br>select&nbsp;trunc(decode(ww,&nbsp;53,&nbsp;to_date(yy&nbsp;||&nbsp;'3112',&nbsp;'yyyyddmm'),&nbsp;to_date(yy&nbsp;||&nbsp;'-'&nbsp;||&nbsp;to_char(ww&nbsp;*&nbsp;7),&nbsp;'yyyy-ddd')),&nbsp;'d')&nbsp;-&nbsp;6&nbsp;first_day<br>&nbsp;&nbsp;from&nbsp;(select&nbsp;substr('2004-33',&nbsp;1,&nbsp;4)&nbsp;yy,&nbsp;to_number(substr('2004-33',&nbsp;6))&nbsp;ww<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dual)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>select&nbsp;trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')&nbsp;last_day&nbsp;from&nbsp;dual<br><br>select&nbsp;max(v_date)&nbsp;from<br>&nbsp;&nbsp;(select&nbsp;(to_date('200408','yyyymm')&nbsp;+&nbsp;rownum)&nbsp;v_date<br>&nbsp;&nbsp;from&nbsp;all_tables<br>&nbsp;&nbsp;where&nbsp;rownum&nbsp;&lt;&nbsp;370)<br>where&nbsp;to_char(v_date,'yyyy-iw')&nbsp;=&nbsp;'2004-33'<br><br>3.查询某周的日期<br>select&nbsp;min_date,&nbsp;to_char(min_date,'day')&nbsp;day&nbsp;from<br>(select&nbsp;to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd')&nbsp;min_date&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;all_tables<br>&nbsp;&nbsp;where&nbsp;rownum&nbsp;&lt;=&nbsp;decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)&nbsp;&nbsp;<br>&nbsp;&nbsp;union<br><br>&nbsp;&nbsp;select&nbsp;to_date(substr('2004-33',1,4)-1||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd')&nbsp;min_date&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;all_tables&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;rownum&nbsp;&lt;=&nbsp;7<br>&nbsp;&nbsp;union<br><br>&nbsp;&nbsp;select&nbsp;to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd')&nbsp;min_date&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;all_tables&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;rownum&nbsp;&lt;=&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>)<br>where&nbsp;to_char(min_date,'yyyy-iw')&nbsp;='2004-33'</span></font> </p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:26 <a href="http://www.blogjava.net/zhangzhong1018/articles/107964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql 语句</title><link>http://www.blogjava.net/zhangzhong1018/articles/107963.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 02 Apr 2007 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/107963.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/107963.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/107963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/107963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/107963.html</trackback:ping><description><![CDATA[<p class=blog-content>oRACLE函数&nbsp;SQL中的单记录函数<br>1.ASCII<br>返回与指定的字符对应的十进制数;<br>SQL&gt;&nbsp;select&nbsp;ascii('A')&nbsp;A,ascii('a')&nbsp;a,ascii('0')&nbsp;zero,ascii('&nbsp;')&nbsp;space&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZERO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE<br>---------&nbsp;---------&nbsp;---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32<br><br><br>2.CHR<br>给出整数,返回对应的字符;<br>SQL&gt;&nbsp;select&nbsp;chr(54740)&nbsp;zhao,chr(65)&nbsp;chr65&nbsp;from&nbsp;dual;<br><br>ZH&nbsp;C<br>--&nbsp;-<br>赵&nbsp;A<br><br>3.CONCAT<br>连接两个字符串;<br>SQL&gt;&nbsp;select&nbsp;concat('010-','88888888')||'转23'&nbsp;&nbsp;高乾竞电话&nbsp;from&nbsp;dual;<br><br>高乾竞电话<br>----------------<br>010-88888888转23<br><br>4.INITCAP<br>返回字符串并将字符串的第一个字母变为大写;<br>SQL&gt;&nbsp;select&nbsp;initcap('smith')&nbsp;upp&nbsp;from&nbsp;dual;<br><br>UPP<br>-----<br>Smith<br><br><br>5.INSTR(C1,C2,I,J)<br>在一个字符串中搜索指定的字符,返回发现指定的字符的位置;<br>C1&nbsp;&nbsp;&nbsp;&nbsp;被搜索的字符串<br>C2&nbsp;&nbsp;&nbsp;&nbsp;希望搜索的字符串<br>I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;搜索的开始位置,默认为1<br>J&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出现的位置,默认为1<br>SQL&gt;&nbsp;select&nbsp;instr('oracle&nbsp;traning','ra',1,2)&nbsp;instring&nbsp;from&nbsp;dual;<br><br>INSTRING<br>---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9<br><br><br>6.LENGTH<br>返回字符串的长度;<br>SQL&gt;&nbsp;select&nbsp;name,length(name),addr,length(addr),sal,length(to_char(sal))&nbsp;from&nbsp;gao.nchar_tst;<br><br>NAME&nbsp;&nbsp;&nbsp;LENGTH(NAME)&nbsp;ADDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LENGTH(ADDR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAL&nbsp;LENGTH(TO_CHAR(SAL))<br>------&nbsp;------------&nbsp;----------------&nbsp;------------&nbsp;---------&nbsp;--------------------<br>高乾竞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;北京市海锭区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;9999.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br><br><br><br>7.LOWER<br>返回字符串,并将所有的字符小写<br>SQL&gt;&nbsp;select&nbsp;lower('AaBbCcDd')AaBbCcDd&nbsp;from&nbsp;dual;<br><br>AABBCCDD<br>--------<br>aabbccdd<br><br><br>8.UPPER<br>返回字符串,并将所有的字符大写<br>SQL&gt;&nbsp;select&nbsp;upper('AaBbCcDd')&nbsp;upper&nbsp;from&nbsp;dual;<br><br>UPPER<br>--------<br>AABBCCDD<br><br><br><br>9.RPAD和LPAD(粘贴字符)<br>RPAD&nbsp;&nbsp;在列的右边粘贴字符<br>LPAD&nbsp;&nbsp;在列的左边粘贴字符<br>SQL&gt;&nbsp;select&nbsp;lpad(rpad('gao',10,'*'),17,'*')from&nbsp;dual;<br><br>LPAD(RPAD('GAO',1<br>-----------------<br>*******gao*******<br>不够字符则用*来填满<br><br><br>10.LTRIM和RTRIM<br>LTRIM&nbsp;&nbsp;删除左边出现的字符串<br>RTRIM&nbsp;&nbsp;删除右边出现的字符串<br>SQL&gt;&nbsp;select&nbsp;ltrim(rtrim('&nbsp;&nbsp;&nbsp;gao&nbsp;qian&nbsp;jing&nbsp;&nbsp;&nbsp;','&nbsp;'),'&nbsp;')&nbsp;from&nbsp;dual;<br><br>LTRIM(RTRIM('<br>-------------<br>gao&nbsp;qian&nbsp;jing<br><br><br>11.SUBSTR(string,start,count)<br>取子字符串,从start开始,取count个<br>SQL&gt;&nbsp;select&nbsp;substr('13088888888',3,8)&nbsp;from&nbsp;dual;<br><br>SUBSTR('<br>--------<br>08888888<br><br><br>12.REPLACE('string','s1','s2')<br>string&nbsp;&nbsp;&nbsp;希望被替换的字符或变量<br>s1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;被替换的字符串<br>s2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要替换的字符串<br>SQL&gt;&nbsp;select&nbsp;replace('he&nbsp;love&nbsp;you','he','i')&nbsp;from&nbsp;dual;<br><br>REPLACE('H<br>----------<br>i&nbsp;love&nbsp;you<br><br><br>13.SOUNDEX<br>返回一个与给定的字符串读音相同的字符串<br>SQL&gt;&nbsp;create&nbsp;table&nbsp;table1(xm&nbsp;varchar(8));<br>SQL&gt;&nbsp;insert&nbsp;into&nbsp;table1&nbsp;values('weather');<br>SQL&gt;&nbsp;insert&nbsp;into&nbsp;table1&nbsp;values('wether');<br>SQL&gt;&nbsp;insert&nbsp;into&nbsp;table1&nbsp;values('gao');<br><br>SQL&gt;&nbsp;select&nbsp;xm&nbsp;from&nbsp;table1&nbsp;where&nbsp;soundex(xm)=soundex('weather');<br><br>XM<br>--------<br>weather<br>wether<br><br><br>14.TRIM('s'&nbsp;from&nbsp;'string')<br>LEADING&nbsp;&nbsp;&nbsp;剪掉前面的字符<br>TRAILING&nbsp;&nbsp;剪掉后面的字符<br>如果不指定,默认为空格符<br><br>15.ABS<br>返回指定值的绝对值<br>SQL&gt;&nbsp;select&nbsp;abs(100),abs(-100)&nbsp;from&nbsp;dual;<br><br>ABS(100)&nbsp;ABS(-100)<br>---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100<br><br><br>16.ACOS<br>给出反余弦的值<br>SQL&gt;&nbsp;select&nbsp;acos(-1)&nbsp;from&nbsp;dual;<br><br>ACOS(-1)<br>---------<br>3.1415927<br><br><br>17.ASIN<br>给出反正弦的值<br>SQL&gt;&nbsp;select&nbsp;asin(0.5)&nbsp;from&nbsp;dual;<br><br>ASIN(0.5)<br>---------<br>.52359878<br><br><br>18.ATAN<br>返回一个数字的反正切值<br>SQL&gt;&nbsp;select&nbsp;atan(1)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;ATAN(1)<br>---------<br>.78539816<br><br><br>19.CEIL<br>返回大于或等于给出数字的最小整数<br>SQL&gt;&nbsp;select&nbsp;ceil(3.1415927)&nbsp;from&nbsp;dual;<br><br>CEIL(3.1415927)<br>---------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br><br><br>20.COS<br>返回一个给定数字的余弦<br>SQL&gt;&nbsp;select&nbsp;cos(-3.1415927)&nbsp;from&nbsp;dual;<br><br>COS(-3.1415927)<br>---------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1<br><br><br>21.COSH<br>返回一个数字反余弦值<br>SQL&gt;&nbsp;select&nbsp;cosh(20)&nbsp;from&nbsp;dual;<br><br>COSH(20)<br>---------<br>242582598<br><br><br>22.EXP<br>返回一个数字e的n次方根<br>SQL&gt;&nbsp;select&nbsp;exp(2),exp(1)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;&nbsp;EXP(2)&nbsp;&nbsp;&nbsp;&nbsp;EXP(1)<br>---------&nbsp;---------<br>7.3890561&nbsp;2.7182818<br><br><br>23.FLOOR<br>对给定的数字取整数<br>SQL&gt;&nbsp;select&nbsp;floor(2345.67)&nbsp;from&nbsp;dual;<br><br>FLOOR(2345.67)<br>--------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2345<br><br><br>24.LN<br>返回一个数字的对数值<br>SQL&gt;&nbsp;select&nbsp;ln(1),ln(2),ln(2.7182818)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;LN(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LN(2)&nbsp;LN(2.7182818)<br>---------&nbsp;---------&nbsp;-------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;.69314718&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.99999999<br><br><br>25.LOG(n1,n2)<br>返回一个以n1为底n2的对数<br>SQL&gt;&nbsp;select&nbsp;log(2,1),log(2,4)&nbsp;from&nbsp;dual;<br><br>LOG(2,1)&nbsp;&nbsp;LOG(2,4)<br>---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br><br><br>26.MOD(n1,n2)<br>返回一个n1除以n2的余数<br>SQL&gt;&nbsp;select&nbsp;mod(10,3),mod(3,3),mod(2,3)&nbsp;from&nbsp;dual;<br><br>MOD(10,3)&nbsp;&nbsp;MOD(3,3)&nbsp;&nbsp;MOD(2,3)<br>---------&nbsp;---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br><br><br>27.POWER<br>返回n1的n2次方根<br>SQL&gt;&nbsp;select&nbsp;power(2,10),power(3,3)&nbsp;from&nbsp;dual;<br><br>POWER(2,10)&nbsp;POWER(3,3)<br>-----------&nbsp;----------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27<br><br><br>28.ROUND和TRUNC<br>按照指定的精度进行舍入<br>SQL&gt;&nbsp;select&nbsp;round(55.5),round(-55.4),trunc(55.5),trunc(-55.5)&nbsp;from&nbsp;dual;<br><br>ROUND(55.5)&nbsp;ROUND(-55.4)&nbsp;TRUNC(55.5)&nbsp;TRUNC(-55.5)<br>-----------&nbsp;------------&nbsp;-----------&nbsp;------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-55<br><br><br>29.SIGN<br>取数字n的符号,大于0返回1,小于0返回-1,等于0返回0<br>SQL&gt;&nbsp;select&nbsp;sign(123),sign(-100),sign(0)&nbsp;from&nbsp;dual;<br><br>SIGN(123)&nbsp;SIGN(-100)&nbsp;&nbsp;&nbsp;SIGN(0)<br>---------&nbsp;----------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br><br><br>30.SIN<br>返回一个数字的正弦值<br>SQL&gt;&nbsp;select&nbsp;sin(1.57079)&nbsp;from&nbsp;dual;<br><br>SIN(1.57079)<br>------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br><br><br>31.SIGH<br>返回双曲正弦的值<br>SQL&gt;&nbsp;select&nbsp;sin(20),sinh(20)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;SIN(20)&nbsp;&nbsp;SINH(20)<br>---------&nbsp;---------<br>.91294525&nbsp;242582598<br><br><br>32.SQRT<br>返回数字n的根<br>SQL&gt;&nbsp;select&nbsp;sqrt(64),sqrt(10)&nbsp;from&nbsp;dual;<br><br>SQRT(64)&nbsp;&nbsp;SQRT(10)<br>---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;3.1622777<br><br><br>33.TAN<br>返回数字的正切值<br>SQL&gt;&nbsp;select&nbsp;tan(20),tan(10)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;TAN(20)&nbsp;&nbsp;&nbsp;TAN(10)<br>---------&nbsp;---------<br>2.2371609&nbsp;.64836083<br><br><br>34.TANH<br>返回数字n的双曲正切值<br>SQL&gt;&nbsp;select&nbsp;tanh(20),tan(20)&nbsp;from&nbsp;dual;<br><br>TANH(20)&nbsp;&nbsp;&nbsp;TAN(20)<br>---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;2.2371609<br><br><br><br>35.TRUNC<br>按照指定的精度截取一个数<br>SQL&gt;&nbsp;select&nbsp;trunc(124.1666,-2)&nbsp;trunc1,trunc(124.16666,2)&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;&nbsp;TRUNC1&nbsp;TRUNC(124.16666,2)<br>---------&nbsp;------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;124.16<br><br><br><br>36.ADD_MONTHS<br>增加或减去月份<br>SQL&gt;&nbsp;select&nbsp;to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm')&nbsp;from&nbsp;dual;<br><br>TO_CHA<br>------<br>200002<br>SQL&gt;&nbsp;select&nbsp;to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm')&nbsp;from&nbsp;dual;<br><br>TO_CHA<br>------<br>199910<br><br><br>37.LAST_DAY<br>返回日期的最后一天<br>SQL&gt;&nbsp;select&nbsp;to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd')&nbsp;from&nbsp;dual;<br><br>TO_CHAR(SY&nbsp;TO_CHAR((S<br>----------&nbsp;----------<br>2004.05.09&nbsp;2004.05.10<br>SQL&gt;&nbsp;select&nbsp;last_day(sysdate)&nbsp;from&nbsp;dual;<br><br>LAST_DAY(S<br>----------<br>31-5月&nbsp;-04<br><br><br>38.MONTHS_BETWEEN(date2,date1)<br>给出date2-date1的月份<br>SQL&gt;&nbsp;select&nbsp;months_between('19-12月-1999','19-3月-1999')&nbsp;mon_between&nbsp;from&nbsp;dual;<br><br>MON_BETWEEN<br>-----------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9<br>SQL&gt;selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd'))&nbsp;mon_betw&nbsp;from&nbsp;dual;<br><br>MON_BETW<br>---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-60<br><br><br>39.NEW_TIME(date,'this','that')<br>给出在this时区=other时区的日期和时间<br>SQL&gt;&nbsp;select&nbsp;to_char(sysdate,'yyyy.mm.dd&nbsp;hh24:mi:ss')&nbsp;bj_time,to_char(new_time<br>&nbsp;&nbsp;2&nbsp;&nbsp;(sysdate,'PDT','GMT'),'yyyy.mm.dd&nbsp;hh24:mi:ss')&nbsp;los_angles&nbsp;from&nbsp;dual;<br><br>BJ_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOS_ANGLES<br>-------------------&nbsp;-------------------<br>2004.05.09&nbsp;11:05:32&nbsp;2004.05.09&nbsp;18:05:32<br><br><br>40.NEXT_DAY(date,'day')<br>给出日期date和星期x之后计算下一个星期的日期<br>SQL&gt;&nbsp;select&nbsp;next_day('18-5月-2001','星期五')&nbsp;next_day&nbsp;from&nbsp;dual;<br><br>NEXT_DAY<br>----------<br>25-5月&nbsp;-01<br><br><br><br>41.SYSDATE<br>用来得到系统的当前日期<br>SQL&gt;&nbsp;select&nbsp;to_char(sysdate,'dd-mm-yyyy&nbsp;day')&nbsp;from&nbsp;dual;<br><br>TO_CHAR(SYSDATE,'<br>-----------------<br>09-05-2004&nbsp;星期日<br>trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒<br>SQL&gt;&nbsp;select&nbsp;to_char(trunc(sysdate,'hh'),'yyyy.mm.dd&nbsp;hh24:mi:ss')&nbsp;hh,<br>&nbsp;&nbsp;2&nbsp;&nbsp;to_char(trunc(sysdate,'mi'),'yyyy.mm.dd&nbsp;hh24:mi:ss')&nbsp;hhmm&nbsp;from&nbsp;dual;<br><br>HH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HHMM<br>-------------------&nbsp;-------------------<br>2004.05.09&nbsp;11:00:00&nbsp;2004.05.09&nbsp;11:17:00<br><br><br><br>42.CHARTOROWID<br>将字符数据类型转换为ROWID类型<br>SQL&gt;&nbsp;select&nbsp;rowid,rowidtochar(rowid),ename&nbsp;from&nbsp;scott.emp;<br><br>ROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROWIDTOCHAR(ROWID)&nbsp;ENAME<br>------------------&nbsp;------------------&nbsp;----------<br>AAAAfKAACAAAAEqAAA&nbsp;AAAAfKAACAAAAEqAAA&nbsp;SMITH<br>AAAAfKAACAAAAEqAAB&nbsp;AAAAfKAACAAAAEqAAB&nbsp;ALLEN<br>AAAAfKAACAAAAEqAAC&nbsp;AAAAfKAACAAAAEqAAC&nbsp;WARD<br>AAAAfKAACAAAAEqAAD&nbsp;AAAAfKAACAAAAEqAAD&nbsp;JONES<br><br><br>43.CONVERT(c,dset,sset)<br>将源字符串&nbsp;sset从一个语言字符集转换到另一个目的dset字符集<br>SQL&gt;&nbsp;select&nbsp;convert('strutz','we8hp','f7dec')&nbsp;"conversion"&nbsp;from&nbsp;dual;<br><br>conver<br>------<br>strutz<br><br><br>44.HEXTORAW<br>将一个十六进制构成的字符串转换为二进制<br><br><br>45.RAWTOHEXT<br>将一个二进制构成的字符串转换为十六进制<br><br><br><br>46.ROWIDTOCHAR<br>将ROWID数据类型转换为字符类型<br><br><br><br>47.TO_CHAR(date,'format')<br>SQL&gt;&nbsp;select&nbsp;to_char(sysdate,'yyyy/mm/dd&nbsp;hh24:mi:ss')&nbsp;from&nbsp;dual;<br><br>TO_CHAR(SYSDATE,'YY<br>-------------------<br>2004/05/09&nbsp;21:14:41<br><br><br><br>48.TO_DATE(string,'format')<br>将字符串转化为ORACLE中的一个日期<br><br><br>49.TO_MULTI_BYTE<br>将字符串中的单字节字符转化为多字节字符<br>SQL&gt;&nbsp;&nbsp;select&nbsp;to_multi_byte('高')&nbsp;from&nbsp;dual;<br><br>TO<br>--<br>高<br><br><br>50.TO_NUMBER<br>将给出的字符转换为数字<br>SQL&gt;&nbsp;select&nbsp;to_number('1999')&nbsp;year&nbsp;from&nbsp;dual;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YEAR<br>---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1999<br><br><br>51.BFILENAME(dir,file)<br>指定一个外部二进制文件<br>SQL&gt;insert&nbsp;into&nbsp;file_tb1&nbsp;values(bfilename('lob_dir1','image1.gif'));<br><br><br>52.CONVERT('x','desc','source')<br>将x字段或变量的源source转换为desc<br>SQL&gt;&nbsp;select&nbsp;sid,serial#,username,decode(command,<br>&nbsp;&nbsp;2&nbsp;&nbsp;0,'none',<br>&nbsp;&nbsp;3&nbsp;&nbsp;2,'insert',<br>&nbsp;&nbsp;4&nbsp;&nbsp;3,<br>&nbsp;&nbsp;5&nbsp;&nbsp;'select',<br>&nbsp;&nbsp;6&nbsp;&nbsp;6,'update',<br>&nbsp;&nbsp;7&nbsp;&nbsp;7,'delete',<br>&nbsp;&nbsp;8&nbsp;&nbsp;8,'drop',<br>&nbsp;&nbsp;9&nbsp;&nbsp;'other')&nbsp;cmd&nbsp;&nbsp;from&nbsp;v$session&nbsp;where&nbsp;type!='background';<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SID&nbsp;&nbsp;&nbsp;SERIAL#&nbsp;USERNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMD<br>---------&nbsp;---------&nbsp;------------------------------&nbsp;------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;none<br><br><br>53.DUMP(s,fmt,start,length)<br>DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值<br>SQL&gt;&nbsp;col&nbsp;global_name&nbsp;for&nbsp;a30<br>SQL&gt;&nbsp;col&nbsp;dump_string&nbsp;for&nbsp;a50<br>SQL&gt;&nbsp;set&nbsp;lin&nbsp;200<br>SQL&gt;&nbsp;select&nbsp;global_name,dump(global_name,1017,8,5)&nbsp;dump_string&nbsp;from&nbsp;global_name;<br><br>GLOBAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DUMP_STRING<br>------------------------------&nbsp;--------------------------------------------------<br>ORACLE.WORLD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Typ=1&nbsp;Len=12&nbsp;CharacterSet=ZHS16GBK:&nbsp;W,O,R,L,D<br><br><br>54.EMPTY_BLOB()和EMPTY_CLOB()<br>这两个函数都是用来对大数据类型字段进行初始化操作的函数<br><br><br>55.GREATEST<br>返回一组表达式中的最大值,即比较字符的编码大小.<br>SQL&gt;&nbsp;select&nbsp;greatest('AA','AB','AC')&nbsp;from&nbsp;dual;<br><br>GR<br>--<br>AC<br>SQL&gt;&nbsp;select&nbsp;greatest('啊','安','天')&nbsp;from&nbsp;dual;<br><br>GR<br>--<br>天<br><br><br>56.LEAST<br>返回一组表达式中的最小值<br>SQL&gt;&nbsp;select&nbsp;least('啊','安','天')&nbsp;from&nbsp;dual;<br><br>LE<br>--<br>啊<br><br><br>57.UID<br>返回标识当前用户的唯一整数<br>SQL&gt;&nbsp;show&nbsp;user<br>USER&nbsp;为"GAO"<br>SQL&gt;&nbsp;select&nbsp;username,user_id&nbsp;from&nbsp;dba_users&nbsp;where&nbsp;user_id=uid;<br><br>USERNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USER_ID<br>------------------------------&nbsp;---------<br>GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25<br><br><br><br>58.USER<br>返回当前用户的名字<br>SQL&gt;&nbsp;select&nbsp;user&nbsp;from&nbsp;&nbsp;dual;<br><br>USER<br>------------------------------<br>GAO<br><br><br>59.USEREVN<br>返回当前用户环境的信息,opt可以是:<br>ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE<br>ISDBA&nbsp;&nbsp;查看当前用户是否是DBA如果是则返回true<br>SQL&gt;&nbsp;select&nbsp;userenv('isdba')&nbsp;from&nbsp;dual;<br><br>USEREN<br>------<br>FALSE<br>SQL&gt;&nbsp;select&nbsp;userenv('isdba')&nbsp;from&nbsp;dual;<br><br>USEREN<br>------<br>TRUE<br>SESSION<br>返回会话标志<br>SQL&gt;&nbsp;select&nbsp;userenv('sessionid')&nbsp;from&nbsp;dual;<br><br>USERENV('SESSIONID')<br>--------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;152<br>ENTRYID<br>返回会话人口标志<br>SQL&gt;&nbsp;select&nbsp;userenv('entryid')&nbsp;from&nbsp;dual;<br><br>USERENV('ENTRYID')<br>------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>INSTANCE<br>返回当前INSTANCE的标志<br>SQL&gt;&nbsp;select&nbsp;userenv('instance')&nbsp;from&nbsp;dual;<br><br>USERENV('INSTANCE')<br>-------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>LANGUAGE<br>返回当前环境变量<br>SQL&gt;&nbsp;select&nbsp;userenv('language')&nbsp;from&nbsp;dual;<br><br>USERENV('LANGUAGE')<br>----------------------------------------------------<br>SIMPLIFIED&nbsp;CHINESE_CHINA.ZHS16GBK<br>LANG<br>返回当前环境的语言的缩写<br>SQL&gt;&nbsp;select&nbsp;userenv('lang')&nbsp;from&nbsp;dual;<br><br>USERENV('LANG')<br>----------------------------------------------------<br>ZHS<br>TERMINAL<br>返回用户的终端或机器的标志<br>SQL&gt;&nbsp;select&nbsp;userenv('terminal')&nbsp;from&nbsp;dual;<br><br>USERENV('TERMINA<br>----------------<br>GAO<br>VSIZE(X)<br>返回X的大小(字节)数<br>SQL&gt;&nbsp;select&nbsp;vsize(user),user&nbsp;from&nbsp;dual;<br><br>VSIZE(USER)&nbsp;USER<br>-----------&nbsp;------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;SYSTEM<br><br><br><br>60.AVG(DISTINCT|ALL)<br>all表示对所有的值求平均值,distinct只对不同的值求平均值<br>SQLWKS&gt;&nbsp;create&nbsp;table&nbsp;table3(xm&nbsp;varchar(8),sal&nbsp;number(7,2));<br>语句已处理。<br>SQLWKS&gt;&nbsp;&nbsp;insert&nbsp;into&nbsp;table3&nbsp;values('gao',1111.11);<br>SQLWKS&gt;&nbsp;&nbsp;insert&nbsp;into&nbsp;table3&nbsp;values('gao',1111.11);<br>SQLWKS&gt;&nbsp;&nbsp;insert&nbsp;into&nbsp;table3&nbsp;values('zhu',5555.55);<br>SQLWKS&gt;&nbsp;commit;<br><br>SQL&gt;&nbsp;select&nbsp;avg(distinct&nbsp;sal)&nbsp;from&nbsp;gao.table3;<br><br>AVG(DISTINCTSAL)<br>----------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3333.33<br><br>SQL&gt;&nbsp;select&nbsp;avg(all&nbsp;sal)&nbsp;from&nbsp;gao.table3;<br><br>AVG(ALLSAL)<br>-----------<br>&nbsp;&nbsp;&nbsp;&nbsp;2592.59<br><br><br>61.MAX(DISTINCT|ALL)<br>求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次<br>SQL&gt;&nbsp;select&nbsp;max(distinct&nbsp;sal)&nbsp;from&nbsp;scott.emp;<br><br>MAX(DISTINCTSAL)<br>----------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5000<br><br><br>62.MIN(DISTINCT|ALL)<br>求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次<br>SQL&gt;&nbsp;select&nbsp;min(all&nbsp;sal)&nbsp;from&nbsp;gao.table3;<br><br>MIN(ALLSAL)<br>-----------<br>&nbsp;&nbsp;&nbsp;&nbsp;1111.11<br><br><br>63.STDDEV(distinct|all)<br>求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差<br>SQL&gt;&nbsp;select&nbsp;stddev(sal)&nbsp;from&nbsp;scott.emp;<br><br>STDDEV(SAL)<br>-----------<br>&nbsp;&nbsp;1182.5032<br><br>SQL&gt;&nbsp;select&nbsp;stddev(distinct&nbsp;sal)&nbsp;from&nbsp;scott.emp;<br><br>STDDEV(DISTINCTSAL)<br>-------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1229.951<br><br><br><br>64.VARIANCE(DISTINCT|ALL)<br>求协方差<br><br>SQL&gt;&nbsp;select&nbsp;variance(sal)&nbsp;from&nbsp;scott.emp;<br><br>VARIANCE(SAL)<br>-------------<br>&nbsp;&nbsp;&nbsp;&nbsp;1398313.9<br><br><br>65.GROUP&nbsp;BY<br>主要用来对一组数进行统计<br>SQL&gt;&nbsp;select&nbsp;deptno,count(*),sum(sal)&nbsp;from&nbsp;scott.emp&nbsp;group&nbsp;by&nbsp;deptno;<br><br>&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;&nbsp;COUNT(*)&nbsp;&nbsp;SUM(SAL)<br>---------&nbsp;---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8750<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10875<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9400<br><br><br><br>66.HAVING<br>对分组统计再加限制条件<br>SQL&gt;&nbsp;select&nbsp;deptno,count(*),sum(sal)&nbsp;from&nbsp;scott.emp&nbsp;group&nbsp;by&nbsp;deptno&nbsp;having&nbsp;count(*)&gt;=5;<br><br>&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;&nbsp;COUNT(*)&nbsp;&nbsp;SUM(SAL)<br>---------&nbsp;---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10875<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9400<br>SQL&gt;&nbsp;select&nbsp;deptno,count(*),sum(sal)&nbsp;from&nbsp;scott.emp&nbsp;having&nbsp;count(*)&gt;=5&nbsp;group&nbsp;by&nbsp;deptno&nbsp;;<br><br>&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;&nbsp;COUNT(*)&nbsp;&nbsp;SUM(SAL)<br>---------&nbsp;---------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10875<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9400<br><br><br>67.ORDER&nbsp;BY<br>用于对查询到的结果进行排序输出<br>SQL&gt;&nbsp;select&nbsp;deptno,ename,sal&nbsp;from&nbsp;scott.emp&nbsp;order&nbsp;by&nbsp;deptno,sal&nbsp;desc;<br><br>&nbsp;&nbsp;&nbsp;DEPTNO&nbsp;ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAL<br>---------&nbsp;----------&nbsp;---------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;CLARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2450<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;MILLER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1300<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;FORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2975<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1100<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;800<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2850<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1600<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;TURNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1500<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1250<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;MARTIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1250<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;JAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;950&nbsp;</p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/107963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-04-02 14:25 <a href="http://www.blogjava.net/zhangzhong1018/articles/107963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>