??xml version="1.0" encoding="utf-8" standalone="yes"?> 数字函数 1.1、ABS(n)函数 ExamplesQselect abs(-15) “test” from dual; 1.2、ACOS(n)函数 ExamplesQselect acos(0.6) “test”,acos(-.6) “test1” from dual; 1.3、COS(n)函数 ExamplesQselect cos(1.6) “test”,cos(-6) “test1” from dual; 1.4、SIN(n)函数 ExamplesQselect sin(1.6) “test”,sin(-6) “test1” from dual; 1.5、ASIN(n)函数 ExamplesQselect asin(0.6) “test”,asin(-0.6) “test1” from dual; 1.6、TAN(n)函数 ExamplesQselect tan(6) “test”,tan(-0.6) “test1” from dual; 1.7、ATAN(n)函数 ExamplesQselect atan(6) “test”,atan(-0.6) “test1” from dual; 1.8、ATAN2(n,m)函数 ExamplesQselect atan2(19,3) “test”,atan2(-9,-0.9) “test1” from dual; 1.9、SINH(n)函数 ExamplesQselect sinh(6) “test”,sinh(-0.6) “test1” from dual; 1.10、TANH(n)函数 ExamplesQselect tanh(6) “test”,tanh(-0.6) “test1” from dual; 1.11、CEIL(n)函数 ExamplesQselect ceil(6) “test”,ceil(6.6) “test1” from dual; 1.12、COSH(n)函数 ExamplesQselect cosh(6) “test”,cosh(6.6) “test1” from dual; 1.13、EXP(n)函数 ExamplesQselect exp(6) “test” from dual; 1.14、FLOOR(n)函数 ExamplesQselect floor(6) “test”,floor(9.3) “test1” from dual; 1.15、LN(n)函数 ExamplesQselect ln(6) “test” from dual; 1.16、LOG(m,n)函数 ExamplesQselect log(6,3) “test” from dual; 1.17、MOD(m,n)函数 ExamplesQselect mod(6,3) “test” from dual; 1.18、POWER(m,n)函数 ExamplesQselect power(6,3) “test” from dual; 1.19、ROUND(n,[m])函数 ExamplesQselect round(6.698,2) “test” from dual; 1.20、SIGN(n)函数 ExamplesQselect sign(6.698) “test”,sign(-9) “test1”,sign(0) “test2” from dual; 1.21、SQRT(n)函数 ExamplesQselect sqrt(6.698) “test” from dual; 1.22、TRUNC(n,[m])函数 ExamplesQselect trunc(6.698,2) “test”,trunk(696.3,-2) “test1” from dual; 字符函数 2.1、ASCII(n)函数 ExamplesQselect ascii(‘A’) “test”,ascii(‘我们’) “test1” from dual; 2.2、CHR(n)函数 ExamplesQselect ascii(54992) “test” from dual; 2.3、CONCAT(n,m)函数 ExamplesQselect concat(‘中国’,’人民’) “test” from dual; 2.4、INITCAP(n)函数 ExamplesQselect initcap(‘????#8217;) “test”,initcap(‘my word’) “test1”,initcap(‘my中国word’) “test2” from dual; 2.5、INSTR(chr1,chr2,[n,[m]])函数 ExamplesQselect instr('pplkoopijk','k',-1,1) “test” from dual; 备注Q当nCN搜烦Q但q回g然是按正向排列得出的位置?/p>
2.6、LENGTH(n)函数 ExamplesQselect length('ppl ') “test”,length(null) “test1” from dual; 2.7、LOWER(n)函数 ExamplesQselect lower('KKKD') “test” from dual; 2.8、LPAD(chr1,n,[chr2])函数 ExamplesQselect lpad('kkk',5) “test”,lpad(‘kkkkk’,4) “test1”,lpad(‘kkk’,6,’lll’) “test2” from dual; 2.9、LTRIM(chr,[n])函数 ExamplesQselect ltrim('abcde',’a’) “test”,ltrim(‘abcde’,’b’) “test1”,ltrim(‘abcdefg’,’cba’) “test2” from dual; 2.10、NLS_INITCAP(chr,[’nls_param’])函数 ExamplesQselect nls_initcap('ab cde') “test”,nls_initcap(‘a b c d e’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual; 2.11、NLS_LOWER(chr,[‘nls_param’])函数 ExamplesQselect nls_lower('ABC') “test”,nls_lower(‘ABC’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual; 2.12、NLSSORT(col,[’nls_param’])函数 ExamplesQSELECT part_number FROM cux_om_part_all ORDER BY nlssort(part_number,'nls_sort=SCHINESE_RADICAL_M') 2.13、NLS_UPPER(chr,[‘nls_param’])函数 ExamplesQSELECT nls_upper('ddddd','nls_sort=xdanish') FROM dual 2.14、REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函数(10g新函? 其中replace_string,position,occurtence,match_parameter参数都是可选的?/p>
2.15、REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函数(10g新函? 其中position,occurtence,match_parameter参数都是可选的 Examples:select regexp_substr(‘http://www.oracle.com/products’,’http://([[:alnum:]]+\.?) {3,4} / ?’) “regexp_substr” from dual 2.16、REGEXP_LIKE(source_string, pattern 其中position,occurtence,match_parameter参数都是可选的 Examples: 2.17、REGEXP_INSTR(source_string, pattern Examples: 附注Q上面红色标题的四个函数是oracle 10g才有的函敎ͼ使用正则表达式可以实现很强大的功能。鉴于变化太多,可以参考oracle的官Ҏ(gu)档:SQL Reference(W七? Examples: SELECT REPLACE('abcdeef','e','oo') "test",REPLACE('abcdeef','ee','oo') "test1",REPLACE('abcdeef',NULL,'oo') "test2",REPLACE('abcdeef','ee',NULL) "test3" FROM dual 2.19、RPAD(chr1,n,chr2)函数 2.20、RTRIM(chr,[set])函数 2.21、SOUNDEX(chr)函数 Examples:select soundex(‘ship’) “test”,soundex(‘sleep’) “test1” from dual; 2.22、SUBSTR(chr,m[,n])函数 Examples:select substr(‘abcdef’,0,3) “test”,substr(‘abcdef’,1,3) “test1”,substr(‘abcdef’,-3,3) “test2”,substr(‘abcdef’,-1,3) “test3” from dual 注意Qm??Ӟ开始位|是一L(fng)Q都是从W一位开始,m的时候,仍然是按从左到右的顺序取Q所以如果m?1Qn的长度再大,也只能取到最后一个字W,因ؓchr双已经没有字符了?/p>
2.23、TRANSLATE(chr,from_str,to_str)函数 Examples: SELECT translate('abcdeabc','abc','fgh') "test",translate('abcdeabc','abc','hf') "test1",translate('abcdeabc','ab','hfgh') "test2",translate('abcdeabc','abc',' ') "test3" FROM dual 注意Q匹配的规则是from_str和to_str每个字符按顺序相对应Q如果from_str字符于to_str中的字符Q则只替换能对应的字W,to_str后面不能和from_str对应的字W则不管Q如果from_str字符多于to_str字符Q则from_str中找不到对应字符按照null来处理?/p>
2.24、TRIM(chr)函数 其具体的语法格式如下Q?/p>
TRIMQ[LEADING|TRAILING|BOTH][trimchar FROM] stringQ?/p>
其中Q?/p>
LEADING 指明仅仅字W串的前~字符删除 TRAILING 指明仅仅字W串的尾随字W删?/p>
BOTH 指明既删除前~字符Q也删除N字符。这也是默认方式 string L一待处理字W串 trimchar 可选项。指明试囑ֈ除什么字W,默认被删除的字符是空?/p>
下面是该函数的用情况: TRIMQ?#8217; Ashley ’Q?‘Ashley’ TRIMQLEADING ’*’ FROM’***Ashley***’Q?‘Ashley***’ 2.25、UPPER(chr)函数 其具体的语法格式如下Q?/p>
UPPERQstringQ?/p>
其中Q?/p>
string LVARCHAR2或CHAR型字W串 下面是该函数的用情况: UPPERQ?#8217;THIS IS a Test’Q?‘THIS IS A TEST’ 日期函数 3.1、add_months(d,n) 说明:q回当前会话时区中的当前日期旉 说明:q回数据库实例时? 说明:昄指定格式的日期倹{?br />
select extract(month from sysdate) "This Month" from dual; 说明:q回包含了日期参数的月䆾的最后一天的日期 说明:q回d1和d2两个月䆾之间相差的月敎ͼ若d1<d2,q回负数Qd1>d2Q返回正敎ͼ若d1和d2都是月底或者天数相同,则返回整敎ͼ否则以每?1天ؓ基准数返回小数?br />
select months_between(to_date('2007-01-31','yyyy-mm-dd'),to_date('2006-11-30','yyyy-mm-dd')) from dual; 说明:q回日期d指定的在日期d之后的第一个工作日Q?/p>
SELECT next_day(SYSDATE,'星期?) FROM dual; Select next_day(sysdate,’monday’) from dual; 错误Q不能用英文单?/p>
q回当前日期后的W一个星期四的日期。若当前日期已经是星期四或过了星期四Q则q回下周的星期四对应的日期,否则q回本周星期四的日期?/p>
注意Qvarchar2指定工作日的时候和当前数据库实例的参数讄有关Q字W串需要用中文写,如果中文不行Q就使用英文星期代表?/p>
3.8、round(d,fmt) Select round(sysdate,’month’) from dual; 3.9、trunc(d,fmc) SELECT trunc(SYSDATE,'month') FROM dual; 3.10、sysdate 应用Q? 2. select to_char( to_date(222,'J'),'Jsp') from dual 3.求某天是星期? 4. 两个日期间的天数 5. 旉为null的用? 6.月䆾? 9. 查找月䆾 11 14.处理月䆾天数不定的办? 16.扑և今年的天? 闰年的处理方? 17.yyyy与rrrr的区? 18.不同时区的处? 19.5U钟一个间? 2002-11-1 9:55:00 35786 20.一q的W几? 21.计算时,?U?毫秒 select * from tabname 23.next_day函数 q回下个星期的日?day?-7或星期日-星期?1表示星期?br />
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算赗? 25,trunc[截断到最接近的日?单位为天] ,q回的是日期cd 26,q回日期列表中最晚日?br />
select greatest('01-1?04','04-1?04','10-2?04') from dual 27.计算旉?br />
?oracle旉差是以天Cؓ单位,所以换成q月,?br />
28.更新旉 29.查找月的W一?最后一?br />
SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month, 转换函数 4.1、asciistr(str) SELECT asciistr('中华民族') FROM dual; 备注Q和该函数相似的有ascii,它是取得字符串第一个字W的ascii码,后面的字W不;chr是将ascii码{换ؓ对应的字W?/p>
4.2、cast() SELECT CAST(SYSDATE AS VARCHAR2(100)) FROM dual; 4.3、chartorowid(str) 4.4、convert(str,char_set,source_char_set) SELECT convert('中国','US7ASCII','ZHS16GBK') FROM dual; 4.4、rowidtochar(rowid) 4.5、to_char() select to_char(10000,’L99G999D99MI’) from dual; 转换成货币格?/p>
4.6、to_date() 4.7、to_number() 单行函数 decode(exer.search1,result1[search2,result2,...][,defalut]) 分组函数 6.2max 取最大?/span> 6.3min 取最?/span> 6.4count 取记录数 6.5sum 求和 应用Q?/span> 1.分组函数和distinct关键词的搭配 2.l函CI?br />
select count(comm) from emp 3.分组数据 4.使用group by规则 5.关于group by条g分组的问?br />
A.group by可以和where来搭?br />
where只能在group by的前?br />
Select JOB From EMP Where SAL>2000 Group By JOB B.where子句中不能包括组函数 对象函数 table:citys q州 A q州 A,B,C,D 请问oracle 的sql语句要怎么?--SQL游标
--游标Q是指向上下文区的指?/span>
/*
1 隐含游标
隐含游标又称SQL游标Q专门用于处理SELECT INTOQINSERTQUPDATE及DELETE语句Q当在PL/SQL中执?br />
INSERTQUPDATE及DELETEӞ为取得DML语句作用的结果,必须要用SQL游标属性,SQL游标包括sql%found,
sql%notfound,sql%rowcount,sql%isopen四个属性?br />
Q?Qsql%isopen 用日元确定SQL游标是否已经打开Q当执行SELECT INTOQINSERTQUPDATE及DELETE语句时会?br />
含打开游标Qƈ且在执行完成后隐含关闭游标。所以对于开发h员该属性永qؓfalse,不需要用该属性?br />
Q?Qsql%found/sql%notfound 用于定SQL语句执行是否成功?br />
SQL语句执行是否成功Ҏ(gu)是否有作用来判断Q当SQL语句有作用时Qsql%found属性gؓTRUE(sql%notfound属性gؓFALSE)Q否则反之?/span>*/
declare
v_name user_info.name%type := 'junly';
begin
update user_info set money = money*1.1
where name=v_name;
if sql%found then
dbms_output.put_line('语句执行成功');
else
dbms_output.put_line('用户名不存在');
end if;
end;
-- Q?Qsql%rowcount q回SQL语句作用的总计行数
declare
v_name user_info.name%type := 'junly';
begin
update user_info set money = money*1.1
where name=v_name;
dbms_output.put_line('修改?/span>'||sql%rowcount||'?/span>');
end;
/*2 昑ּ游标
用于处理SELECT语句
*/
]]>--控制语句
--if
if condition then
statements;
elsif condition then
statements;
else
statements;
end if;
--case
case v_no
when 10 then
statements;
when 20 then
statements;
when 30 then
statements;
else
statements;
end case;
--------------
case
when v_no>30 then
statements;
when v_no>20 then
statements;
when v_no>10 then
statements;
end case;
--loop
loop
statements;
exit when condition;
end loop;
--while
while condition loop
statements;
end loop;
--for
for i in [reverse]
v_start..v_end loop
statements;
end loop;
--i是@环控制变量,不需要显式定义,v_start,v_end分别Z界值和上界倹{如果指定reverse则@环变量自动减一?/span>
begin
for i in reverse 1..10 loop
dbms_output.put_line(i);
end loop;
end;
--10,9,8,7,6,5,4,3,2,1
--嵌套循环
declare
result int;
begin
<<outer>>
for i in 1..10 loop
<<inner>>
for j in 1..10 loop
result:=i*j;
exit outer when i=9;
dbms_output.put_line(i||j);
end loop inner;
end loop outer;
end;
]]>
描述Q返回数值n的绝对倹{?/p>
描述Q返回数值n的反余u倹{输入数D围在-1~1之间Q返回gؓ弧度?/p>
描述: q回数值n的余弦倹{返回gؓ弧度?/p>
描述: q回数值n的正弦倹{?/p>
描述: q回数值n的反正u倹{输入数D围在-1~1之间Q返回gؓ弧度?/p>
描述: q回数值n的正切倹{?/p>
描述: q回数值n的反正切倹{输入数gQ意,q回gؓ弧度?/p>
描述: q回数值n/m的反正切倹{输入数gQ意,q回gؓ弧度?/p>
描述: q回数值n的双曲正弦倹{输入数gQ意?/p>
描述: q回数值n的双曲正切倹{输入数gQ意?/p>
描述: q回大于{于数值n的最整数?/p>
描述: q回数值n的双曲余弦倹{?/p>
描述: q回e的nơ冥?e=2.71828183…)
描述: q回于{于数值n的最大整数?/p>
描述: q回数值n的自然对数?n必须大于0)
描述: q回以m为底的数值n的对数?m>1,n>0)
描述: q回m/n后的余数Q若n=0Q则q回mQ求模运)
描述: q回m的nơ冥
描述: 执行四舍五入q算Qm可以省略Q当省略mӞ四舍五入到整CQ当m为正数时Q四舍五入到数点后m位;当m数时Q四舍五入到数点前m位?/p>
描述: 数值的正负Q当n<0则返?1Q当n>0则返?Q当n=0q回0?/p>
描述: q回数值n的^Ҏ(gu)?n>=0)
描述: 截取数值n,m可以省略Q当省略m时则截取n的小数部分;当m为正数时则将n截取到小数点后m位;当m数时则将n截取到小数点前m?/p>
说明Q字W函数输入gؓ字符cdQ返回gؓ字符cd或数字类型,可以在sql语句中直接用,也可以在pl/sql块中使用?/p>
描述: q回字符串的ascii?当输入ؓ字符串时q回W一个字W的ascii?
描述: q回对应的ascii码的字符(n必须为数字类?
描述: q接n和mQn和m可以是字W,也可以是字符丌Ӏ作用和”||”一栗?/p>
描述: 字W串n中每个单词首字母大写Q其余小?区分单词的规则是按空格或非字母字W;可以输入中文字符Q但没有M作用)
描述: 获取字符串chr2在字W串chr1中出现的位置。n和m可?省略是默认ؓ1Qn代表开始查扄起始位置Q当nCN开始搜索;m代表字串出现的次数?/p>
描述: q回字符或字W串长度?当n为nullӞq回nllQ返回的长度包括后面的空?
描述: n转换为小写?/p>
描述: 在chr1左边填充字符chr2Q得字W总长度ؓn。chr2可选,默认为空|当chr1字符串长度大于nӞ则从左边截取chr1的n个字W显C?/p>
描述: L字符串chr左边包含的n字符串中的Q何字W,直到出现一个不包含在n中的字符为止?/p>
描述: chr首字母大写。Nls_param可选,指定排序的方式。(有SCHINESE_RADICAL_MQ部首、笔画)QSCHINESE_STROKE_MQ笔甅R部首)QSCHINESE_PINYIN_MQ拼韻IQ?/p>
描述: 字W串转换为小写。Nls_param可选,指定排序的方式。(有SCHINESE_RADICAL_MQ部首、笔画)QSCHINESE_STROKE_MQ笔甅R部首)QSCHINESE_PINYIN_MQ拼韻IQ?/p>
描述: Ҏ(gu)nls_param指定的方式对col字段q行排序?/p>
描述: chr转换为大写。Nls_param可选,用于指定排序规则
描述:字符串替换函数。相当于增强的replace函数。Source_string指定源字W表辑ּQpattern指定规则表达式;replace_string指定用于替换的字W串Qposition指定起始搜烦位置Qoccurtence指定替换出现的第n个字W串Qmatch_parameter指定默认匚w操作的文本串?/p>
描述Q返回匹配模式的子字W串。相当于增强的substr函数。Source_string指定源字W表辑ּQpattern指定规则表达式;position指定起始搜烦位置Qoccurtence指定替换出现的第n个字W串Qmatch_parameter指定默认匚w操作的文本串?/p>
[, match_parameter])函数(10g新函?
描述Q返回满_配模式的字符丌Ӏ相当于增强的like函数。Source_string指定源字W表辑ּQpattern指定规则表达式;match_parameter指定默认匚w操作的文本串?/p>
[, start_position
[, occurrence
[, return_option
[, match_parameter]]]])函数(10g新函?
描述: 该函数查?pattern Qƈq回该模式的W一个位|。?zhn)可以随意指定?zhn)想要开始搜索的 start_position?occurrence 参数默认?1Q除非?zhn)指定?zhn)要查找接下来出现的一个模式。return_option 的默认gؓ 0Q它q回该模式的起始位置Qgؓ 1 则返回符合匹配条件的下一个字W的起始位置
2.18、REPLACE(chr,search_string,[,replacement_string])函数
描述:chr中满search_string条g的替换ؓreplacement_string指定的字W串Q当search_string为nullӞq回chrQ当replacement_string为nullӞq回chr中截取掉search_string部分的字W串?/p>
描述Q在chr1双填充chr2Qɘq回字符串长度ؓn..当chr1长度大于nӞq回左端n个字W。参考LPAD()函数?/p>
描述Q去掉chr双包含的set中的M字符Q直到出C个不是set中的字符l束。参考LTRIM()函数?/p>
描述Q返回字W串的语韌C,可以用来比较字符串的发音是否相同?/p>
描述Q取chr的子丌ӀM代表开始位|,n是要取的长度。当m?时从首字W开始,当m时从字符串尾部开始截取?/p>
描述Q另一U替换函数的用法?/p>
TRIM函数字W串的前~Q或NQ字W删除?/p>
UPPER函数间返回字W串的大写Ş式?/p>
说明Q用于从一个日期值增加或减少一些月?d代表一个日?n为正数则代表在d日期 上增加n月䆾Qn数则代表在d日期上减n?
?select add_months(sysdate,12) "Next Year" from dual;
3.2、current_date()
alter session set time_zone=’-11:00’(更改当前会话时区命o)
?select sessiontimezone,current_date from dual;
3.3、dbtimezone()
select dbtimezone from dual;
3.4、extract()
select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
3.5、last_day()
select last_day(sysdate) "last" from dual;
3.6、months_between(d1,d2)
3.7、next_day(d,varchar2)
说明Q返回日期时间的四舍五入l果。如果fmt指定q_则以7?日ؓ分界Q如果指定月Q则?6日ؓ分界Q关于按天来四舍五入Q在试时无法理?资料上解释按天的时候是以中?2Q?0为分?
说明Q按照指定的格式截断日期Q如果指定格式ؓq_则结果ؓ本年1?日,如果格式指定为月Q则l果为本?日,关于格式指定为天q未理解?/p>
1. 日期和字W{换函数用法(to_date,to_charQ?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字W串
select to_char(sysdate,'yyyy') as nowYear from dual; //获取旉的年
select to_char(sysdate,'mm') as nowMonth from dual; //获取旉的月
select to_char(sysdate,'dd') as nowDay from dual; //获取旉的日
select to_char(sysdate,'hh24') as nowHour from dual; //获取旉的时
select to_char(sysdate,'mi') as nowMinute from dual; //获取旉的分
select to_char(sysdate,'ss') as nowSecond from dual; //获取旉的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//
昄Two Hundred Twenty-Two
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
讄日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这?
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;
注意要用TO_DATE(null)
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12?1号中?2点之后和12?L(fng)12点之前是不包含在q个范围之内的?
所以,当时间需要精的时候,觉得to_charq是必要?
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的cd, 比如: US7ASCII, date格式的类型就? '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我这只是举了NLS_DATE_LANGUAGEQ当然还有很多,
可查?
select * from nls_session_parameters
select * from V$NLS_PARAMETERS
8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not in ( '1', '7' )
查找2002-02-28?002-02-01间除星期一和七的天?
在前后分别调用DBMS_UTILITY.GET_TIME, 让后结果相?得到的是1/100U? 而不是毫U?.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1.03225806451613
10. Next_day的用?
Next_day(date, day)
Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意Q第一条记录的TIME 与最后一行是一L(fng)
可以建立一个函数来处理q个问题
create or replace function sys_date return date is
begin
return sysdate;
end;
select to_char(sys_date,'hh:mi:ss') from all_objects;
12.获得时?
extract()扑և日期或间隔值的字段?br />
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07
SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19
13.q月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,
newer_date,
older_date
from (
select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date
from emp
)
)
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )
如果?8׃是闰q?
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual
SSSSS表示5位秒?
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');
//
floor((date2-date1) /365) 作ؓq?
floor((date2-date1, 365) /30) 作ؓ?
d(mod(date2-date1, 365), 30)作ؓ?
1 2 3 4 5 6 7
?一 ?????
---------------------------------------------------------------
select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
日期 q回的是?然后 转换为ss
24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
select sysdate S1,
round(sysdate) S2 ,
round(sysdate,'year') YEAR,
round(sysdate,'month') MONTH ,
round(sysdate,'day') DAY from dual
select sysdate S1,
trunc(sysdate) S2, //q回当前日期,无时分秒
trunc(sysdate,'year') YEAR, //q回当前q的1??无时分秒
trunc(sysdate,'month') MONTH , //q回当前月的1?无时分秒
trunc(sysdate,'day') DAY //q回当前星期的星期天,无时分秒
from dual
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //旉?q?br />
select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //旉??br />
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //旉??br />
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //旉??br />
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //旉??br />
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //旉?U?/p>
?oracle旉加减是以天数为单?设改变量为n,所以换成q月,?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变旉-q?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改变旉-?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变旉-?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变旉-?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变旉-?br />
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变旉-U?/p>
Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
FROM dual;
说明Q将L字符集的字符串{换ؓ当前数据库实例对应的ascii字符丌Ӏ?/p>
说明Q将一个内|数据类型或集合cd转变为另一个内|数据类型或集合cd?/p>
说明Q将字符串{变ؓrowid数据cdQ但字符串必ȝ合rowid格式?/p>
说明Q将字符串从一个字W集转变为另一个字W集。Str转变的字W串Qchar_set{变后的字W集Qsource_char_set字符串原始的字符集?/p>
说明Q将rowid转换为对应的varchar2数据cd倹{?/p>
select to_char(n’中国’) from dual; 转变为本地字W集cd
转变为日期格式?/p>
字W串转变为数字|但字W串必须是数?0~9)?/p>
用于匚w特定表达式的l果Q如果search1匚w于exerQ则q回result1Q如果search2匚w于exer则返回result2Q?br />
依次cLQ如果没有Q何匹配关pdq回defalut
6.1AVG 取^均?/span>
Select AVG(SAL) From EMP
select max(sal) from emp
select min(sal) from emp
SELECT COUNT(*) FROM EMP
也可?br />
select count(empno) from emp
注意:
要么count(*)
要么count(没有null值的?--主键)
Select SUM(SAL*12) From EMP
Select COUNT(Distinct SAL) From EMP
Ig参与q算,直接被过滤掉
group by子句
SELECT COUNT(*) FROM EMP GROUP BY DEPTNO
A.group by后面的字D不必显C在select列表?br />
B.反之则不?br />
也就是说:select后面的字D必dgroup by子句中出?br />
例外的是:
在组函数(count,max,min{?中出现的字段除外
group by后面不能有where
条g的表辑֏能用having来表C?br />
Select DEPTNO,Max(SAL),Min(SAL) From EMP Group By DEPTNO Having Max(SAL)>2000
]]>--1定义标量变量
--Q?Q定义语?/span>
变量?nbsp;[constant] 数据cd [not null] [:= | default expr]
-- constant:用于指定帔R。必L定初始?/span>
-- := 用于为变量和帔R指定初始?/span>
-- expr初始值的pl/sql表达式,可以是文本倹{变量、函数等
--CZ1Q?/span>
v_name varchar2(10);
v_rate constant number(3,2) := 5.5;
v_valid boolean not null default false;
--Q?Q?/span>
--变量赋g用等号前加冒P:=Q?/span>
--CZ2Q?/span>
declare
v_name varchar2(10);
v_money number(6,2);
c_tax_rate constant number(3,2) := -0.03;
v_tax_money number(6,2);
begin
select user_name,game_money into v_name,v_money
from user_info where user_id = 100000;
v_tax_money := v_money*c_tax_rate;
dbms_output.put_line('name:'||v_name);
dbms_output.put_line('money:'||v_money);
dbms_output.put_line('rate:'||v_tax_money);
end
--Q?Q?TYPE属?/span>
v_name user_info.user_name%TYPE;
v_money user_info.game_money%TYPE;
c_tax_rate constant number(3,2) := -0.03;
v_tax_money v_money%TYPE;
--变量v_nameQv_money与user_info表的user_nameQgame_money列的cd和长度完全一?/span>
--变量v_tax_money与变是v_money的类型和长度完全一?/span>
--2复合变量
--Q?Qpl/sql记录Q类gl构Q?/span>
-- 在定义部分定义记录类型和记录变量Q在执行部分引用该记录变?/span>
-- 引用记录成员时必要加记录变量作为前~Q记录变量。记录成员)
--CZ3Q?/span>
declare
TYPE record_type IS RECORD(
v_name user_info.user_name%TYPE,
v_money user_info.game_money%TYPE
);
emp_record record_type;
begin
select user_name,game_money into emp_record
from user_info where user_id = 100000;
dbms_output.put_line('name:'||emp_record.v_name);
dbms_output.put_line('money:'||emp_record.v_money);
end
--Q?Qpl/sql表(cM于数l)
-- pl/sql表与数组区别Q下标没有上下限Q个数年没有限制Q下可以ؓ负?/span>
-- 必须先在定义部分定义pl/sql表类型和pl/sql表变量,在执行部分引用该pl/sql表变?/span>
--CZ4Q?/span>
declare
TYPE name_table_type IS TABLE OF user_info.user_name%TYPE
INDEX BY BINARY_INTEGER;
v_name name_table_type;
begin
select user_name into v_name(-1)
from user_info where user_id = 100000;
dbms_output.put_line('name:'||v_name(-1));
end
--Q?Q嵌套表
--Q?QVARRAYQ变长数l)
--3 参照变量
-- 用于存放数值指针的变量?/span>
--Q?Q游标变量(REF CURSORQ?/span>
-- 静态游标:需要在定义游标时指定相应的select语句
-- CZ5Q?/span>
declare
type c1 is ref cursor;--c1为ref cursorcd
emp_cursor c1;--emp_cursor为游标变?/span>
v_name user_info.user_name%TYPE;
v_money user_info.game_money%TYPE;
begin
open emp_cursor for --打开游标变量时指定了对应的select语句
select user_name,game_money from user_info where user_id = 100000;
loop
fetch emp_cursor into v_name,v_money;
exit when emp_cursor%notfound;
dbms_output.put_line(v_name);
end loop;
end;
-- 动态游标:在定义游标变量时不要需指定相应的select语句Q而是打开游标时指定select语句
--Q?Q对象类型变量(REF obj_typeQ?/span>
-- 是指向对象实例的指针
-- CZ6Q?/span>
create or replace type home_type as object(--建立对象cd
street varchar2(50),city varchar2(20),
state varchar2(20),zipcode varchar2(6),
owner varchar2(10)
);
create table homes of home_type;--
insert into homes values('上v?00?/span>','上v','200000','junly');
commit;
--对象表homes存放家庭地址及户d名,如每个家庭有四口人,Z同一家庭成员׃n家庭地址Q?/span>
--可用REF引用home_type对象cdQ从而降低占用空间?/span>
create table person(
id number(6) primary key,
name varchar2(10),
addr ref home_type
);
insert into person select 1,'junly',ref(p) from homes p where p.owner='junly'
insert into person select 2,'junl2',ref(p) from homes p where p.owner='junly'
--person表插入数据时Qaddr列将存入指向homes表相应数据的地址指针
--4 LOB变量
/*用于存储大批量数据的变量
Q?Q内部LOB
CLOB 支技事务操作 存储数据库中 用于存储大批量字W数?br />
BLOB 支技事务操作 存储数据库中 用于存储大批量二q制数据
NCLOB 支技事务操作 存储数据库中 用于存储大批量字W数?br />
Q?Q外部LOB
BFILE 不支技事务 存在OS文g?nbsp; 存储指向OS文g的指?br />
*/
--5非PL/SQL变量
]]>
city ran
q州 B
q州 C
q州 D
city ran
select city,wmsys.wm_concat(ran)
from citys
group by city
2 备忘insert into emp (id,name,sex,tim) --dual
values(id_seq.nextval,'junly',default,to_date('2010-5-11 11:25:00','yyyy-mm-dd hh24:mi:ss'))
3 直接装蝲--直接装蝲方式
insert /*+append*/ into emp (field1,field2,field3)
select f1,f2,f3 from tep
where f4=20;
4 更新--更新
update emp set (field1,field2,field3)=(
select f1,f2,f3 from tep where f4=20)
where field4=100;
5 取消重复
select count(distinct user_name) as num
from user_info
6 group by + rollup 横向计
-- group by + rollup 横向计
select num1,sum(num2),sum(num3) from tmp_tb
group by rollup (num1)
7 group by + cube U向计
-- group by + cube U向计
select num1,sum(num2),sum(num3) from tmp_tb
group by cube(num1)
8 自连?br />
-- 自连?/span>
/* user_info
id name pid
-------------------
7888 king
7889 blank 7888
7900 jones 7888
*/
select manager.name from user_info manager,user_info worker
where manager.id=worker.pid
and worker.name='jones';
----------
king
9 ALL和ANYQ不能单独用,与单行比较符Q?,>,<,>=,<=,<>Q结合用)
--ALL和ANYQ不能单独用,与单行比较符Q?,>,<,>=,<=,<>Q结合用)
/*
ALL 必须要符合子查询l果的所有?br />
ANY 只要W合子查询结果的M个值即?br />
*/
select user_name,money from user_info where money >all(
select money form user_game where id=10);
select user_name,money from user_info where money >any(
select money form user_game where id>10);
10 合ƈ查询
--Q?Qunion 取两个结果集的ƈ集,自动L重复行ƈ以第一列的l果排序
--Q?Qunion all 取两个结果集的ƈ集,不去重复行也不进行排?/span>
--Q?Qintersect 取两个结果集的交?/span>
--Q?Qminus 取两个结果集的差?/span>
select uname,sal from emp where sal>200
union
select uname,sal from emp where job='aaa'
11 case条g分支
select name,case when money>3000 then 3
when money>2000 then 2 when money>1000 then 1 end
from user_info where user_id=10000;
12 with子名重用子查?br />
--with子名重用子查?/span>
with summary as (
select name,sum(money) as total from user_info
group by name
)
select name,total from summary
where total>3000;
13 connect by (感谢q州Nicholas?
select sysdate - rownum rn from dual connect by rownum<100
--?/span>
select to_number(to_char(rn,'yyyymmdd'))rn from(select sysdate - rownum rn
from dual connect by rownum<(
select floor(sysdate-regist_time)from sales_info where user_id=15587657))
--月䆾
select to_number(to_char(rn,'yyyymm'))rn from(
select add_months(sysdate,-rownum) rn
from dual connect by rownum<(
select floor(months_between(sysdate,regist_time)) from sales_info where user_id=15587657))
14 批理修改
merge into sales_info s
using tb_rd_user_info u
on (s.user_id=u.user_id)
when matched then
update
set s.user_name=u.user_name;
commit;
15 删除重复记录
delete from user where rowid in (
select max(rowid) from user group by userName having count(userName)>1)
]]>--?
declare
v_name varchar2(10);
begin
select user_name into v_name from tb_rd_user_info where user_name='ywj12';
dbms_output.put_line('name:'||v_name);
exception
when no_data_found then
dbms_output.put_line('error name');
end;
--匿名?/span>
-- 没有名称的pl/sql块,如例1
--命名?/span>
--子程?/span>
-- (1)q程
-- 建立q程时可以指定输入参?in),输出参数(out)
create or replace procedure update_money(uname varchar2,num number)
is
begin
update tb_rd_user_info set game_money = num
where user_name = uname;
end update_money;
-- 删除
drop procedure update_money;
-- 调用
exec update_money('ywj123',100000);
call update_money('ywj123',100000);
-- 重新~译
alter procedure update_money compile;
-- 授权student用户使用该过E?/span>
grant execute on update_money to student;
-- (2)函数
-- 创徏
create or replace function get_user_id(uname varchar2)
return number is
uid number;
begin
select user_id into uid from tb_rd_user_info
where user_name=uname;
return uid;
end;
-- 调用
var rs number
call get_user_id('ywj123') into :rs;
-- 删除
drop function get_user_id;
-- 重新~译
alter function get_user_id compileQ?br />
-- (3)?/span>
-- 创徏(包由包规范和包体两部分组?
-- 包规?/span>
create package emp_pkg is
procedure update_money (uname varchar2,num number);
function get_user_id(uname varchar2) return number;
end;
-- 包体
create package body emp_pkg is
procedure update_money(uname varchar2,num number)
is
begin
update tb_rd_user_info set game_money = num
where user_name = uname;
end update_money;
function get_user_id(uname varchar2)
return number is
uid number;
begin
select user_id into uid from tb_rd_user_info
where user_name=uname;
return uid;
end;
end;
-- 调用
call emp_pkg.update_money('ywj123',100000);
var rs number
call emp_pkg.get_user_id('ywj123') into :rs;
--解发?/span>
存储q程参数传?/span>
参数的作用是向存储过E传递数据,或从存储q程获得q回l果。正的使用参数可以大大增加存储q程的灵zL和通用性?
参数的类型有三种Q如下所C?
参数的定义Ş式和作用如下Q?
参数?IN 数据cd DEFAULT |
定义一个输入参数变量,用于传递参数给存储q程。在调用存储q程Ӟȝ序的实际参数可以是常量、有值变量或表达式等。DEFAULT 关键字ؓ可选项Q用来设定参数的默认倹{如果在调用存储q程时不指明参数Q则参数变量取默认倹{在存储q程中,输入变量接收ȝ序传递的|但不能对其进行赋倹{?
参数?OUT 数据cdQ?
定义一个输出参数变量,用于从存储过E获取数据,卛_量从存储q程中返回值给ȝ序?
在调用存储过E时Q主E序的实际参数只能是一个变量,而不能是帔R或表辑ּ。在存储q程中,参数变量只能被赋D不能将其用于赋|在存储过E中必须l输出变量至赋gơ?
参数?IN OUT 数据cd DEFAULT |
定义一个输入、输出参数变量,兼有以上两者的功能。在调用存储q程Ӟȝ序的实际参数只能是一个变量,而不能是帔R或表辑ּ。DEFAULT 关键字ؓ可选项Q用来设定参数的默认倹{在存储q程中,变量接收ȝ序传递的|同时可以参加赋D,也可以对其进行赋倹{在存储q程中必ȝ变量臛_赋gơ?
如果省略IN、OUT或IN OUTQ则默认模式是IN?nbsp;
CREATE OR REPLACE PROCEDURE CHANGE_SALARY(P_EMPNO IN NUMBER DEFAULT 7788,P_RAISE NUMBER DEFAULT 10)
AS
V_ENAME VARCHAR2(10);
V_SAL NUMBER(5);
BEGIN
SELECT ENAME,SAL INTO V_ENAME,V_SAL FROM EMP WHERE EMPNO=P_EMPNO;
UPDATE EMP SET SAL=SAL+P_RAISE WHERE EMPNO=P_EMPNO;
DBMS_OUTPUT.PUT_LINE('雇员'||V_ENAME||'的工资被改ؓ'||TO_CHAR(V_SAL+P_RAISE));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生错误Q修改失败!');
ROLLBACK;
END;
EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);
可以看出传递参数的序发生了变化,q且明确指出了参数名和要传递的|=>q算W左侧是参数名,右侧是参数表辑ּQ这U赋值方法的意义较清楚?
]]>
1-1?#8220;SQL Server 2005 服务”中停止服?#8220;SQL Server Q?/span>SQLEXPRESSQ?#8221;Q默认是启动状态)
1-2?#8220;SQL Server 2005 |络配置” → “MSSQLSERVER 的协?#8221;Q启?#8220;TCP/IP”Q默认是用状态)Q然后双?#8220;TCP/IP”q入属性设|,?#8220;IP 地址”里,认“IPAll”
中的“TCP 端口”?/span>1433
1-3?#8220;SQL Server 2005 服务”中启动服?#8220;SQL Server Q?/span>MSSQLSERVER Q?#8221;Q默认是停止状态)
1-4、关?#8220;SQL Server Configuration Manager”Q此时可以启?#8220;SQL Server Management Studio”Qƈ用帐?/span>sa、密?/span>123dQ?/span>SQL Server服务器设|正的话应该能d成功Q?/span>
2、导?/span>jar包:
打开Test?#8220;Properties” → “Java Build Path” → “Libraries” → “Add External JARs” Q选择下蝲好的q接驱动?#8220;sqljdbc.jar”Q然后点?#8220;OK”定
3如果你以前用JDBCq接SQL Server 2000的话?span style="color: red">要注意了Q?/span>
?/span>SQL Server 2000 中加载驱动和URL路径的语句是
“com.microsoft.jdbc.sqlserver.SQLServerDriver”
“jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=JSPTest”
?/span>SQL Server 2005 中加载驱动和URL的语句则?/span>
“com.microsoft.sqlserver.jdbc.SQLServerDriver”
“jdbc:sqlserver://localhost:1433; DatabaseName=JSPTest”
注意两者的差异导入CSV文g步骤Q?/p>
1、选择tools->text importer....
2、选择W二个Data to oracle选项卡,然后选择Open Data file....Q选择要导入的csv文gQ确?/p>
3、选择对应的owner和tableQ将字段一一对应Q最后点M方的导入Q数据即导入C选定的table中了?/p>
导出csv文g相对比较单:
1、先用sql语句查询得到l果
2、选择export query results .....选择保存为csv文g卛_?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/lovingprince/archive/2009/03/11/3979833.aspx