您的位置:首页 > 数据库 > Oracle

Oracle PL\SQL 操作(三)Oracle函数

2009-07-08 17:33 447 查看
1.系统变量函数1SYSDATE该函数返回当前的日期和时间。返回的是Oracle服务器的当前日期和时间。
selectsysdatefromdual;

insertintopurchasevalues

(‘SmallWidget’,’SH’,sysdate,10);

insertintopurchasevalues

(‘MeduemWodget’,’SH’,sysdate-15,15);
查看最近30天的所有销售记录,使用如下命令:
select*frompurchase

wherepurchase_datebetween(sysdate-30)andsysdate;
2USER查看用户名。
selectuserfromdual;
3USERENV查看用户环境的各种资料。
selectuserenv(‘TERMINAL’)FROMdual;
2.数值函数1ROUND四舍五入函数ROUND(数值,保留位数)
selectround(3.1415,3)fromdeul;

selectproduct_name,round(product_price,0)price

fromproduct;
2TRUNC从数中截去小数部分TRUNC(数值,截断小数点n位后的数)
selecttrunc(3.145159,3)fromdual;

selecttrunc(123456.45,-1)fromdual;

selecttrunc(123456.45)fromdual;

selectproduct_name,trunc(product_price)price

fromproduct;
3.文本函数1UPPERLOWERINITCAP这三个函数更改提供给它们的文体的大小写。
selectupper(product_name)fromproduct;

selectlower(product_name)fromproduct;

selectinitcap(product_name)fromproduct;
函数INITCAP能够整理杂乱的文本,如下:
selectinitcap(‘thisTEXThAdUNpredictABLEcaSE’)fromdual;
2LENGTH求数据库列中的数据所占的长度。
selectproduct_name,length(product_name)name_length

fromproduct

orderbyproduct_name;
3SUBSTR取子串,格式为:SUBSTR(源字符串,起始位置,子串长度);
createtableitem_test(item_idchar(20),item_descchar(25));

insertintoitem_testvalues(‘LA-101’,’Can,Small’);

insertintoitem_testvalues(‘LA-102’,’Bottle,Small’);

insertintoitem_testvalues(‘LA-103’,’Bottle,Large’);
取编号:
selectsubstr(item_id,4,3)item_num,item_desc

fromitem_test;
4INSTR确定子串在字符串中的位置,格式如下:INSTR(源字符串,要查找的字符串,查找起始位置)
selectinstr(‘thisislineone’,’line’,1)fromdual;
其返回值为子串在源字符串中从起始位置开始第一次出现的位置。上面例子的返回值为9。
selectitem_desc,instr(item_desc,’,’,1)

fromitem_test;
5LTRIMRTRIMTRIM去除字符串左边的空格、去除字符串右边的空格、去除字符串左右两边的空格。
selectltrim(‘abcdef‘)fromdual;
4.日期函数1SYSDATETRUNC这两个函数前面已经出现过,即取Oracle服务器系统的日期和截掉小数部分的功能。观察以下操作:
createtabletest_date(namevarchar2(20),p_datedate);insertintotest_datevalues(‘name1’,sysdate);select*fromtest_date;select*fromtest_datewherep_date=’25-10月-05‘;select*fromtest_datewheretrunc(p_date)=’25-10月-05‘;
Oracle系统中用SYSDATE取得的不仅包含日期而且还包含的有时间信息,时间信息实际上就是表示儒略日数据中的小数部分。2ADD_MONTHS该函数返回一个具有与所提供日期相差月份的日期,函数中给出了未来或以前的月份数。语法如下:
ADD_MONTHS(起始日期,增减月数)selectadd_months(’26-10月-05‘,2)fromdual;selectadd_months(’26-10月-05‘,-2)fromdual;
3LAST_DAY返回包含给定日期的那个月的最后一天。语法为:LAST_DAY(日期)
selectlast_day(’21-2月-80‘)fromdual;
4MONTHS_BETWEEN返回两个日期间的月份。语法为:MONTHS_BETWEEN(较晚日期,较早日期)
selectmonths_between(’12-10月-05‘,’12-9月-03‘)fromdual;
5.数据转换函数1TO_CHAR该函数将日期、时间和数值转换为文本。它的主要价值是提供对日期、时间和数的显示控制;该函数的用法非常灵活,使用较复杂,在此我们仅对经常使用的转换举例说明。1)格式化日期和时间值TO_CHAR(日期数据,格式编码)
selectto_char(sysdate,’YYYY-MM-DDHH24:MI:SS’)fromdual;selectto_char(sysdate,’HH24:MI:SS’)fromdual;selectto_char(sysdate,‘YYYY’)||‘年’||to_char(sysdate,'MM')||'月'||to_char(sysdate,'DD')||'日'日期fromdual
2)格式化数值
selectto_char(5764.12345,'99,999.9999')fromdual;selectto_char(5764.12345,‘09,999.9999')fromdual;
(2)TO_DATE将文本转换为实际的Oracle日期/时间值。格式:TO_DATE(文本,日期格式)
selectto_date(‘2005-10-1011’,’YYYY-MM-DDHH24’)fromdual;insertintoitem_testvalues(‘name-x’,to_date(‘2005-10-25’,’YYYY-MM-DD’));
6.其它函数NVL函数完成一个简单但有用的功能。任何时候给它一个空值,它都返回一个你所选择的值。格式如下:NAL(输入值,如果输入值为空要返回的值)
selectnvl(null,’new_value’)fromdual;selectname,nvl(p_date,sysdate)fromtest_date;
注意:函数中输入值如果输入值为空要返回的值的类型必须一致。7.常用的分组函数(1)SUM该函数累加值并返回总数。
selectsum(quantity)frompurchase;selectsum(sal)fromemp;
(2)COUNT该函数对记录进行统计。
selectcount(*)fromemp;
这个命令有缺点,一般不应该使用。如果一个表有数十万条记录,强制进行全表扫描将会使计数结果的返回非常慢,会降低其他业务工作的处理效率。因些COUNT函数对指定进行单列统计效果会好得多。
selectcount(ename)fromemp;selectcount(1)fromemp;
(3)AVG该函数返回指定列中值的平均数。使用这个函数必须给出相应的列名,且相应列应为数值类型。
selectavg(sal)fromemp;
(4)MIN该函数返回作为参数给出的某列中的最小值。
selectmin(sal)fromemp;
(5)MAX用法与MIN相似
selectmax(sal)fromemp;
8.利用GROUPBY子句分组数据完成下列操作:
createtabletb1(namevarchar2(10),empnonumber(3),salnumber(4));insertintotb1values(‘name-a’,1,1200);insertintotb1values(‘name-b’,1,1500);insertintotb1values(‘name-c’,1,2100);insertintotb1values(‘name-d’,2,900);insertintotb1values(‘name-e’,2,1300);selectempno,sum(sal)fromtb1groupbyempno;selectempno,avg(sal),min(sal),max(sal),count(empno)fromtb1groupbyempno;
9.利用HAVING子句过滤分组的行
selectempno,sum(sal),avg(sal),min(sal),max(sal),count(empno)fromtestgroupbyempnohavingsum(sal)>2500
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: