PLSQL 函数大全

合集下载

SQLPLSQL日期函数总结

SQLPLSQL日期函数总结

SQLPLSQL日期函数总结日期函数在SQL/PLSQL中用于对日期进行计算和操作。

下面是一些常用的日期函数总结。

1.SYSDATE函数:SYSDATE函数用于返回系统当前日期和时间。

它返回一个日期值,包含当前日期和时间的年、月、日、时、分和秒。

2.CURRENT_DATE函数:CURRENT_DATE函数与SYSDATE函数功能相似,返回系统当前日期,但没有时间部分。

3.CURRENT_TIMESTAMP函数:CURRENT_TIMESTAMP函数返回包含当前日期和时间的时间戳。

4.TO_DATE函数:TO_DATE函数用于将一个字符串转换为日期。

它接受两个参数:带日期的字符串和日期格式模型。

例如,TO_DATE('2024-08-15','YYYY-MM-DD')返回一个日期值。

5.TO_CHAR函数:TO_CHAR函数用于将一个日期值转换为字符串。

它接受两个参数:日期值和日期格式模型。

例如,TO_CHAR(SYSDATE,'YYYY-MM-DD')返回当前日期的字符串表示。

6.ADD_MONTHS函数:ADD_MONTHS函数用于在给定日期上添加指定的月份数。

它接受两个参数:日期值和要添加的月份数。

例如,ADD_MONTHS(SYSDATE,3)返回当前日期的三个月后的日期。

7.MONTHS_BETWEEN函数:MONTHS_BETWEEN函数用于计算两个日期之间的月份数。

它接受两个参数:两个日期值。

例如,MONTHS_BETWEEN('2024-01-01','2024-01-01')返回两个日期之间的月份数。

8.EXTRACT函数:EXTRACT函数用于从日期中提取指定的部分。

它接受两个参数:要提取的部分(如年、月、日)和日期值。

例如,EXTRACT(YEARFROMSYSDATE)返回当前日期的年份。

9.TRUNC函数:TRUNC函数用于截断日期部分,并返回一个新的日期值。

plsql函数

plsql函数
在x中查找字符串find_string,然后返回find_string所在的位置。可以提供一个可选的start位置来指定该函数从这个位置开始查找。同样,也可以指定一个可选的occurrence参数,来说明应该返回find_string第几次出现的位置
LENGTH(x)
返回x中字符的个数
LOWER(x)
将x中的字母转换成小写,并返回得到的字符串
LPAD(x, width
[, pad_string])
在x的左边补齐空格,得到总长为width个字符的字符串。该函数可以提供一个可选的pad_string,这个参数用于指定重复使用哪个字符串来补齐x左边的空位。返回x被补齐之后的结果字符串
LTRIM(x[, trim_string])
返回对x截断的结果;y为可选参数,说明对第几位小数截断。如果没有指定y,则对x在0位小数处截断;如果y是负数,则对x在小数点左边的第|y|位处截断
TRUNC(5.75) = 5
TRUNC(5.75, 1) = 5.7
TRUNC(5.75, -1) = 0
表4-3转换函数
函数
说明
ASCIISTR(x)
将x转换为一个VARCHAR2字符串。可以指定一个可选参数format来说明x的格式
TO_CLOB(x)
将x转换为一个字符大对象(CLOB)。CLOB用于保存大量的字符数据
TO_DATE(x[, format])
将x转换为一个DATE类型
TO_DSINTERVAL(x)
将x转换为一个INTERVAL DAY TO SECOND类型
从x的左边截去一些字符。可以使用一个可选的参数trim_string来指定要截去的字符;如果不指定trim_string参数,则默认截去空格

PLSQL语法总结

PLSQL语法总结

PLSQL语法总结1.PL/SQL块:Declare——可选变量、常量、游标、用户自定义的特殊类型Begin——必须SQL语句PL/SQL语句Exception——可选错误发生时的处理动作End;——必须2.Identifier [constant] datatype [not null] [:=|default expr];声明PL/SQL变量3.Set serveroutput on:显示由DBMS_OUTPUT.PUT_LINE输出的结果4.Variable_name table.column_name%type;:由表中已存在的列定义新数据类型v_sal emp.sal%type;5.Identifier:=expr;:变量的赋值6.SELECT select_listINTO {variable_name[, variable_name]…| record_name}FROM tableWHERE condition;从数据库中获取数据7.IF no>0 THENStatements;[ELSIF no=0 THENStatements;][ELSEStatements;]END IF;条件判断语句8.LOOPStatement1;…EXIT[WHEN condition];END LOOP;基本LOOP循环语句9.FOR counter in [REVERSE]Lower_bound..upper_bound LOOPStatement1;Statement2;…END LOOP;FOR循环语句declarev emp%rowtype;beginfor i in 7000..8000 loopbeginselect * into v from empwhere empno = i and sal > 1300 ;dbms_output.put_line(v.ename||' is '||v.sal);exceptionwhen no_data_found then null;end;end loop;end;10.TYPE type_name IS RECORD (组合类型之record)(field_declaration[,field_declaration]…);Field_name{field_type|variable%TYPE|table.column%TYPE|table%ROWTYPE}[[NOT NULL]{:= | DEFAULT}expr]Recordtype type_name定义一个记录declaretype mrec is record(name emp.ename%type,sal emp.sal%type);r mrec;beginselect ename, sal into rfrom emp where empno = 7839;dbms_output.put_line( || ' has sal: ' || r.sal);end;/11.TYPE type_name IS TABLE OF (组合类型之index by table)(column_type | variable%type| table.column%type)[NOT NULL][INDEX BY BINARY_INTEGER];Identifier type_name;创建一个PL/SQL表DECLARETYPE ibt IS TABLE OFVARCHAR2(32)INDEX BY BINARY_INTEGER;v ibt;BEGINV(-12) := 'aaa';V(2) := 'BBB';V(0) := 'C';DBMS_OUTPUT.PUT_LINE(V(-12));DBMS_OUTPUT.PUT_LINE(V(0));DBMS_OUTPUT.PUT_LINE(V(2));END;12.CURSOR cur_name IS Select_statementFROM TABLE WHERE ...;声明游标13.OPEN cur_name;打开游标14.FETCH cur_name INTO v;|record_name];从游标中提取数据15.CLOSE cur_name;关闭游标DECLARECURSOR CRS IS SELECT ENAME, SAL, DNAMEFROM EMP JOIN DEPT USING(DEPTNO)WHERE DEPTNO !=10AND SAL BETWEEN 1500 AND 3000;V CRS%ROWTYPE;BEGINOPEN CRS;LOOPFETCH CRS INTO V;EXIT WHEN CRS%NOTFOUND;DBMS_OUTPUT.PUT_LINE(V.ENAME || ' ' || V.SAL || ' ' || V.DNAME);END LOOP;CLOSE CRS;END;16.FOR record_name IN cur_name LOOPStatement1;Statement2;…END LOOP;游标式的FOR循环DECLARECURSOR C IS SELECT * FROM EMPWHERE SAL BETWEEN 1500 AND 3000AND DEPTNO = 30;BEGINFOR V IN C LOOPDBMS_OUTPUT.PUT_LINE(V.ENAME || ' HAS SAL: ' || V.SAL);END LOOP;END;17.SELECT…FROM…FRO UPDATE [OF column_reference][NOWAIT];在事务执行期间显示锁定以拒绝访问,在更新或删除时锁定该行18.WHERE CURRENT OF cursor;更新或删除游标中当前行的数据19.CREATE [OR REPLACE] PROCEDURE procedure_name[(parameter1 [mode1] datatype1,Parameter2 [mode2] datatype2,…)]IS|ASPL/SQL Block;创建一个过程20.DROP PROCEDURE procedure_name删除过程21.CREATE [OR REPLACE] FUCTION function_name[(parameter1 [mode1] datatype1,Parameter2 [mode2] datatype2,…)]RETURN datatypeIS|ASPL/SQL Block;创建函数22.DROP FUNCTION function_name删除函数23.CREATE [OR REPLACE] PACKAGE Package_nameIS|AS公共变量,异常,游标,子程序声明END package_name;创建一个包声明24.CREATE OR REPLACE PACKAGE BODY package_nameIS私有的变量,静态变量,游标,异常,类型,子程序,子程序体 END package_name;创建包体25.DROP PACKAGE package_name;删除包26.DROP PACKAGE BODY package_name;只删除包主体27.。

plsql除法函数

plsql除法函数

plsql除法函数
在PL/SQL中,可以使用内置的除法函数来执行除法操作。

PL/SQL提供了两个
主要的除法函数:`/`和`DIV`。

1. `/`函数:这是常规的除法运算符。

它执行浮点数除法,返回一个浮点数结果。

例如:
```sql
DECLARE
result NUMBER;
BEGIN
result := 10 / 3;
DBMS_OUTPUT.PUT_LINE(result); -- 输出结果为
3.33333333333333333333333333333333333
END;
```
2. `DIV`函数:这是整数除法函数。

它执行整数除法并返回一个整数结果,省略
小数部分。

例如:
```sql
DECLARE
result NUMBER;
BEGIN
result := 10 DIV 3;
DBMS_OUTPUT.PUT_LINE(result); -- 输出结果为 3
END;
```
需要注意的是,当除数或被除数中至少有一个是浮点数时,`DIV`函数将返回浮点数结果。

除了这两个函数,还可以使用其他数学函数来执行更复杂的除法操作,如
`ROUND`、`TRUNC`等。

这些函数可以用于处理除法结果的精度和舍入方式。

希望以上信息对你有所帮助。

如果还有其他问题,请随时提出。

PLSQL函数解释

PLSQL函数解释

对PL/SQL内置函数(字符函数)的详细描述实现8、UPPER该函数是将整个字符串转换成大写,不对非字母字符串产生作用。

9、ASCII 返回指定字符的ASCII码;如:SQL> select ASCII(' ') from dual;ASCII('')----------3210、CHR 返回指定ASCII码的字符,和ASCII互为反函数。

SQL> select chr(65) from dual;CH--A11、CONCAT 连接两个指定的字符(与“||”操作符作用相同)SQL> SELECT CONCAT('MY','ORACLE 9I') ORACLE FROM DUAL;ORACLE----------------------MYORACLE 9I12、INITCAP 返回指定的字符串,该字符串每一个单词的第一个字母为大写,其余均为小写,不影响不是字母的字符串。

SQL> select initcap(sname)sname,sage,sbirth from friends;SNAME SAGE SBIRTH-------------------- ---------- ----------Lygrobin 22 12-5月 -81Qinbb 25 10-5月 -79Guol 23 14-2月 -8113、INSTR(X,Y)返回Y在X中的位置,如没有则为0;SQL> select instr(sname,'Y') from friends;INSTR(SNAME,'Y')----------------2514、INSTRB(X,Y)返回Y在X中的位置,如没有则为0,对于单字节字符系统,返回的值以字节为单位。

SQL> select instrb(sname,'Y') from friends;INSTRB(SNAME,'Y')-----------------2515、LENGTH(X)返回以字节为单位X的长度,包括填充的字符,如果值是未知的,则返回NULL;SQL> select length(name) from employee;LENGTH(NAME)------------33316、LENGTHB(X)同LENGTH(X),对于单字节字符系统,返回以字节为单位;SQL> select lengthb(name) from employee;LENGTHB(NAME)-------------99917、LOWER 将特定的字符串转化为小写,不影响不是字母的字符串;SQL> select lower(sname) from friends;LOWER(SNAME)--------------------lygrobinqinbbguol18、LPAD(X,I,Y)用字符串Y按指定的填充数I填充X字符串的左边;SQL> select lpad(sname,12,'我是') from student;LPAD(SNAME,12,'我是')-------------------------------我是lygrobin我是我PURVIS我是我TAYLOR19、NLS_INITCAP(string[,nlsparams])与INITCAP函数相同,它可以使用NLSSORT指定的分类方法;该函数返回字符串中每一个单词第一个字母大写其余字母小写的string,不是字母的字符将保持不变。

很好的PLSQL函数

很好的PLSQL函数
SELECT AscII([Chr1]) FROM [Table] //CHAR返回ASC码
SELECT Chr([Num1]) FROM [Table] //ASC返回CHAR值
SELECT Concat([Str1],[Str2]) FROM [Table] //连接两个字符串
修改下次执行时间--dbms_Job.next_date(Job,next_date);
修改间隔时--------dbms_Job.interval(Job,interval);
停止Job-----------dbms.broken(Job,broken,nextdate);
启动Job-----------dbms_Job.run(Jobno);
=================以为为常用函数用法=================
SELECT Least([Num1],[Num2],[Num3],[Num4]) FROM [Table] //取最小值者
SELECT Greatest([Num1],[Num2],[Num3]) FROM [Table] //取最大值者
Alter Table [Table] Drop UnUsed Columns
Alter Table [Table] Modify([Column] Decimal(14,0)) //修改列
Create Sequence BUFFER_FORMULA_Seq NoMaxValue Nocycle //创建序列
W--------WEEK OF THE MONTH----------------1,2,3,4,5
WW-------WEEK OF THE YEAR-----------------1,2,3,.....53

PLSQL常用函数

PLSQL常用函数

PL/SQL 函數 2008-01-18 10:56--【字符串函数】 --字符串截取 substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1;--字符串从前面取三个(0 开 始) select Name,substr(Name,0,3) from t1; --字符串从后面取三个 select Name,substr(Name,-3,3),length(Name) 串长度 from t1;SELECT ASCII('A'),ASCII('B') from dual;select CHR(100),CHR(80) from dual;select CONCAT(CHR(65),CONCAT(CHR(67),CHR(98))) from dual;select CHR(65)||CHR(66)||CHR(76) from dual;--将每 个单词的第一个字母大写其它字母小写返回。

select INITCAP('substr,abc,substring') from dual; --返回 i 在 MISSISSIPPI 中第 3 次出现的位置, select INSTR('Mississippi','i',5,3) from dual; select INSTR('Mississippi','i',-2,3) from dual; --返回的是字节 select INSTRB('Mississippi','i',5,3) from dual; select INSTRB('Mississippi','i',-2,3) from dual; --长度 select length('WHO ARE YOU') from dual; select nvl(null,'空') from dual; --小写 select lower('WHo are You') from dual; --LPAD 左侧用字符串补足到一定长度 select LPAD('DFSDf................',9,'WHO') from dual; select LPAD('DFSD',9,'WHO') from dual; select LPAD('DFSD',9,'') from dual; select LPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual;--把最左边的字符去掉,使其第一个字符不在其中 select ltrim('Mississippi','Mis') from dual; select ltrim('Mississippi','miD') from dual; --RPAD 右侧用字符串补足到一定长度 select RPAD('DFSDf................',9,'WHO') from dual; select RPAD('DFSD',9,'WHO') from dual; select RPAD('DFSD',9,'') from dual; select RPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual; --把最右边的字符去掉,使其第一个字符不在其中 select Rtrim('Mississippi','Mis') from dual; select Rtrim('Mississippi','miD') from dual; --替换 select REPLACE('uptown','up','down') from dual; --substr 和 substrb select SUBSTR('Message',1,4) from dual; select SUBSTR('ABCDEFG',5) from dual; select substrb('国际劳动节国营农场',5) from dual; select substrb('国际劳动节国营农场',2) from dual; select substrb('国际劳动节国营农场',4,8) from dual; select substrb('国际劳动节国营农场',3,8) from dual; --发音 select SOUNDEX('dawes') Dawes,SOUNDEX('daws') Daws, SOUNDEX('dawson') from dual; --translate select TRANSLATE('ABCDefghijklmn','eg','替代') test from dual;select TRIM(' Space padded0..o0.. ') trim from dual;select UPPER('abDCCfasdfsdafasdf') from dual;--【数学函数】所有函数都有数字参数并返回数字值。

oracle常用sql函数

oracle常用sql函数

oracle常用sql函数Oracle是一款非常优秀的数据库管理系统,它提供了很多强大的功能与工具,其中最基本而实用的功能就是SQL函数了。

下面我们将重点介绍一些常用的Oracle SQL函数,帮助读者更好地了解和掌握这些常用的函数,从而更加有效地处理和管理数据。

一、数值型函数1. ABS()函数:用于计算数值的绝对值,比如ABS(-10)会返回10。

2. CEIL()函数:用于向上取整,比如CEIL(3.14)会返回4。

3. FLOOR()函数:用于向下取整,比如FLOOR(3.14)会返回3。

4. MOD()函数:用于求模,比如MOD(12,5)会返回2。

5. ROUND()函数:用于四舍五入,比如ROUND(3.49)会返回3,而ROUND(3.51)会返回4。

二、字符型函数1. CONCAT()函数:用于连接两个字符串,比如CONCAT('hello','world')会返回helloworld。

2. SUBSTR()函数:用于截取字符串,比如SUBSTR('hello',2,3)会返回ell。

3. UPPER()函数:用于将字符串转换成大写,比如UPPER('hello')会返回HELLO。

4. LOWER()函数:用于将字符串转换成小写,比如LOWER('HELLO')会返回hello。

5. TRIM()函数:用于去掉字符串首尾的空格,比如TRIM(' hello ')会返回hello。

三、日期型函数1. CURRENT_DATE函数:用于获取当前日期,比如SELECT CURRENT_DATE FROM DUAL会返回当前日期。

2. SYSDATE函数:用于获取系统当前时间,比如SELECTSYSDATE FROM DUAL会返回系统当前时间。

3. TO_CHAR()函数:用于将日期转换成字符型,比如TO_CHAR(SYSDATE,'yyyy-mm-dd')会返回当前日期的年月日格式。

plsql查找函数

plsql查找函数

plsql查找函数PL/SQL是一种过程式编程语言,它是Oracle数据库的一部分。

在PL/SQL中,我们可以使用函数来执行特定的任务并返回结果。

本文将探讨如何使用PL/SQL查找函数来实现各种功能。

一、查找函数简介在PL/SQL中,查找函数是一种用于查询数据库中数据的函数。

通过使用查找函数,我们可以根据特定的条件从数据库中检索所需的数据。

PL/SQL提供了多种类型的查找函数,包括简单查找函数和高级查找函数。

简单查找函数常用的有COUNT、SUM、AVG、MAX和MIN函数。

COUNT 函数用于计算满足特定条件的行数,SUM函数用于计算满足特定条件的列的总和,AVG函数用于计算满足特定条件的列的平均值,MAX 函数用于找出满足特定条件的列的最大值,MIN函数用于找出满足特定条件的列的最小值。

高级查找函数包括DISTINCT、GROUP BY和HAVING函数。

DISTINCT 函数用于去重,GROUP BY函数用于对结果进行分组,HAVING函数用于筛选分组后的结果。

二、使用查找函数的示例为了更好地理解查找函数的使用,我们将通过一个示例来说明。

假设我们有一个名为"employees"的表,其中包含员工的姓名、部门和工资信息。

我们将使用PL/SQL的查找函数来执行以下几个任务:1.计算员工的总数2.计算员工的平均工资3.找出工资最高的员工4.找出每个部门的员工数目5.找出平均工资超过10000的部门我们可以使用COUNT函数来计算员工的总数:SELECT COUNT(*) FROM employees;这将返回一个数字,表示员工的总数。

接下来,我们可以使用AVG函数来计算员工的平均工资:SELECT AVG(salary) FROM employees;这将返回一个数字,表示员工的平均工资。

然后,我们可以使用MAX函数来找出工资最高的员工:SELECT MAX(salary) FROM employees;这将返回一个数字,表示工资最高的员工的工资。

PLSQL过程函数

PLSQL过程函数
begin
for rec in cur_sal loop
dbms_output.put_line('NO:'||cur_sal%rowcount||'name:'||rec.ename||'--sal:'||rec.sal);
end loop;
end viewDept_10;--应对应对应的过程名
res:=cur_sal%rowcount;
end loop;
p_empcount:='inner 处理'||res;--过程没有返回值,通过此方法获得一个返回值,传入的参数为out
end viewDept;
/
declare
v_str varchar2(20);
pdefault number:=777) --step 5 default value有默认值的参数最好放到后面
is
i number; --step 4 nocopy
begin
dbms_output.put_line('pin:'||pin);
dbms_output.put_line('pout:'||pout);
dbms_output.put_line('NO:'||cur_sal%rowcount||'name:'||rec.ename||'--sal:'||rec.sal);
end loop;
end viewDept;
/
create or replace procedure viewDept(p_deptno number,p_empcount out varchar2)

plsql常用函数汇总

plsql常用函数汇总

oracle教程:PLSQL常用方法汇总2010-01-07在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLIFIED CHINESE';主要知识点:一、有关表的操作建表create table test as select * from dept; --从已知表复制数据和结构create table test as select * from dept where 1=2; --从已知表复制结构但不包括数据2)插入数据:insert into test select * from dept;二、运算符算术运算符:+ - * / 可以在select 语句中使用连接运算符:|| select deptno|| dname from dept;比较运算符:> >= = != < <= like between is null in逻辑运算符:not and or集合运算符:intersect ,union,union all,minus要求:对应集合的列数和数据类型相同查询中不能包含long 列列的标签是第一个集合的标签使用order by时,必须使用位置序号,不能使用列名例:集合运算符的使用:intersect ,union,union all,minusselect * from emp intersect select * from emp where deptno=10 ;select * from emp minus select * from emp where deptno=10;select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复行三,常用ORACLE 函数sysdate为系统日期dual为虚表一)日期函数[重点掌握前四个日期函数]1,add_months[返回日期加(减)指定月份后(前)的日期]select sysdate S1,add_months(sysdate,10) S2,add_months(sysdate,5) S3 from dual;2,last_day [返回该月最后一天的日期]select last_day(sysdate) from dual;3,months_between[返回日期之间的月份数]select sysdate S1, months_between('1-4月-04',sysdate) S2,months_between('1-4月-04','1-2月-04') S3 from dual4,next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日select sysdate S1,next_day(sysdate,1) S2,next_day(sysdate,'星期日') S3 FROM DUAL5,round[舍入到最接近的日期](day:舍入到最接近的星期日)select sysdate S1,round(sysdate) S2 ,round(sysdate,'year') YEAR,round(sysdate,'month') MONTH ,round(sysdate,'day') DAY from dual6,trunc[截断到最接近的日期]select sysdate S1,trunc(sysdate) S2,trunc(sysdate,'year') YEAR,trunc(sysdate,'month') MONTH ,trunc(sysdate,'day') DAY from dual7,返回日期列表中最晚日期select greatest('01-1月-04','04-1月-04','10-2月-04') from dual二)字符函数(可用于字面字符或数据库列)1,字符串截取select substr('abcdef',1,3) from dual2,查找子串位置select instr('abcfdgfdhd','fd') from dual3,字符串连接select 'HELLO'||'hello world' from dual;4, 1)去掉字符串中的空格select ltrim(' abc') s1,rtrim('zhang ') s2,trim(' zhang ') s3 from dual2)去掉前导和后缀select trim(leading 9 from 9998767999) s1,trim(trailing 9 from 9998767999) s2,trim(9 from 9998767999) s3 from dual;5,返回字符串首字母的Ascii值select ascii('a') from dual6,返回ascii值对应的字母select chr(97) from dual7,计算字符串长度select length('abcdef') from dual8,initcap(首字母变大写),lower(变小写),upper(变大写)select lower('ABC') s1,upper('def') s2,initcap('efg') s3 from dual;9,Replaceselect replace('abc','b','xy') from dual;10,translateselect translate('abc','b','xx') from dual; -- x是1位11,lpad [左添充] rpad [右填充](用于控制输出格式)select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;select lpad(dname,14,'=') from dept;12, decode[实现if ..then 逻辑]select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;三)数字函数1,取整函数(ceil 向上取整,floor 向下取整)select ceil(66.6) N1,floor(66.6) N2 from dual;2, 取幂(power) 和求平方根(sqrt)select power(3,2) N1,sqrt(9) N2 from dual;3,求余select mod(9,5) from dual;4,返回固定小数位数(round:四舍五入,trunc:直接截断)select round(66.667,2) N1,trunc(66.667,2) N2 from dual;5,返回值的符号(正数返回为1,负数为-1)select sign(-32),sign(293) from dual;四)转换函数1,to_char()[将日期和数字类型转换成字符类型]1) select to_char(sysdate) s1,to_char(sysdate,'yyyy-mm-dd') s2,to_char(sysdate,'yyyy') s3,to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,to_char(sysdate, 'hh24:mi:ss') s5,to_char(sysdate,'DAY') s6 from dual;2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp2, to_date()[将字符类型转换为日期类型]insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd')); 3, to_number() 转换为数字类型select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数五)其他函数user:返回登录的用户名称select user from dual;vsize:返回表达式所需的字节数select vsize('HELLO') from dual;nvl(ex1,ex2):ex1值为空则返回ex2,否则返回该值本身ex1(常用)例:如果雇员没有佣金,将显示0,否则显示佣金select comm,nvl(comm,0) from emp;nullif(ex1,ex2):值相等返空,否则返回第一个值例:如果工资和佣金相等,则显示空,否则显示工资select nullif(sal,comm),sal,comm from emp;coalesce:返回列表中第一个非空表达式select comm,sal,coalesce(comm,sal,sal*10) from emp;nvl2(ex1,ex2,ex3) :如果ex1不为空,显示ex2,否则显示ex3如:查看有佣金的雇员姓名以及他们的佣金select nvl2(comm,ename,') as HaveCommName,comm from emp;六)分组函数max min avg count sum1,整个结果集是一个组1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和select max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp where deptno=30;2, 带group by 和having 的分组1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno;2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno having deptno=30;3, stddev 返回一组值的标准偏差select deptno,stddev(sal) from emp group by deptno;variance 返回一组值的方差差select deptno,variance(sal) from emp group by deptno;4, 带有rollup和cube操作符的Group Byrollup 按分组的第一个列进行统计和最后的小计cube 按分组的所有列的进行统计和最后的小计select deptno,job ,sum(sal) from emp group by deptno,job;select deptno,job ,sum(sal) from emp group by rollup(deptno,job);cube 产生组内所有列的统计和最后的小计select deptno,job ,sum(sal) from emp group by cube(deptno,job);参见:/topic/201757七、临时表只在会话期间或在事务处理期间存在的表.临时表在插入数据时,动态分配空间create global temporary table temp_dept(dno number,dname varchar2(10))on commit delete rows;insert into temp_dept values(10,'ABC');commit;select * from temp_dept; --无数据显示,数据自动清除on commit preserve rows:在会话期间表一直可以存在(保留数据)on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据)========================== 连接操作================================ 例如有A,B两张表:A表B表a b c d1 0 4 72 9 1 5select * from A,B where A.a = B.c等同于select * from A join B on A.a = B.c结果:a b c d1 0 1 5左连接:select * from A,B where A.a = B.c(+)等同于select * from A left join B on A.a = B.c即以A表查询为主,附带查询出满足A.a = B.c条件的B表中的结果结果:a b c d1 0 1 52 9右连接:select * from A,B where A.a(+) = B.c等同于select * from A right join B on A.a = B.c此查询为左连接,即以A表查询为主,附带查询出满足A.a = B.c条件的B表中的结果结果:c d a b1 5 1 04 7==================================================================================== oracle 函数=============================== DECODE:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)A表a b c1 3 03 2 91 0 53 7 75 5 9select decode(A.a,1,4,3,8),A.b,A.c form A意思:如果A.a的值为1,则将A.a的值查询为4,如果A.a的值为3,则将A.a的值查询为8 结果:a b c4 3 08 2 94 0 58 7 75 5 9select decode(A.a,1,4,8),A.b,A.c form A意思:如果A.a的值为1,则将A.a的值查询为4,否则A.a的值查询为8结果:a b c4 3 08 2 94 0 58 7 78 5 9select decode(A.a,1,4,3,8,7),A.b,A.c form A意思:如果A.a的值为1,则将A.a的值查询为4,如果A.a的值为3,则将A.a的值查询为8,否则查询为7结果:a b c4 3 08 2 94 0 58 7 77 5 9=========================================================================================SEQUENCE=====================================SEQUENCE:CREATE SEQUENCE LOCA TIONS_SEQINCREMENT BY 1START WITH 1MAXV ALUE 9900MINV ALUE 1SELECT LOCATIONS_SEQ.currval FROM DUAL ;SELECT LOCATIONS_SEQ.nextval FROM DUAL ;============================SEQUENCE===============================================================函数===================================日期函数:add_months(d,n) 日期d加n个月last_day(d) 包含d的月份的最后一天的日期month_between(d,e) 日期d与e之间的月份数,e先于dnew_time(d,a,b) a时区的日期和时间d在b时区的日期和时间next_day(d,day) 比日期d晚,由day指定的周几的日期sysdate 当前的系统日期和时间greatest(d1,d2,...dn) 给出的日期列表中最后的日期least(d1,k2,...dn) 给出的日期列表中最早的日期to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期分组函数:avg([distinct/all] n) 列n的平均值count([all] *) 返回查询范围内的行数包括重复值和空值count([distinct/all] n) 非空值的行数max([distinct/all] n) 该列或表达式的最大值min([distinct/all] n) 该列或表达式的最小值stdev([distinct/all] n) 该列或表达式的标准偏差,忽略空值sum([distinct/all] n) 该列或表达式的总和variance([distinct/all] n) 该列或表达式的方差,忽略空值数值函数:abs(m) m的绝对值mod(m,n) m被n除后的余数power(m,n) m的n次方round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)trunc(m[,n]) m截断n位小数位的值(n缺省为0)字符函数:initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写lower(st) 返回st将每个单词的字母全部小写upper(st) 返回st将每个单词的字母全部大写concat(st1,st2) 返回st为st2接st1的末尾(可用操作符"||")lpad(st1,n[,st2]) 返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格rpad(st1,n[,st2]) 返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格ltrim(st[,set]) 返回st,st为从左边删除set中字符直到第一个不是set中的字符。

02.PLSQL中的函数

02.PLSQL中的函数

------------------ ----------------------------- ------------- ---------------MARTIN ALLEN TURNER WARD MARTINSALESMAN ALLENSALESMAN TURNERSALESMAN WARDSALESMAN 6 5 6 4 2 1 0 2
TO_CHAR 函数对日期的转换
• TO_CHAR(date, 'fmt') • 格式(fmt)
– 必须用单引号括起来,并且大小写敏感 – 可包含任何有效的日期格式 – 有一个fm元素去掉前面的零
日期格式的元素
YYYY/YYY/YY YEAR MM MON MONTH DD DY DAY 不同位数的数字表示年 年的拼写 数字月 月的缩写 月的全拼 数字日 星期的缩写 星期的全拼
TO_NUMBER和TO_DATE
• 使用TO_NUMBER函数将字符转换为数字
– TO_NUMBER(char [, 'fmt']))
• 使用TO_DATE函数将字符转换为日期
– TO_DATE(char [, 'fmt'])
嵌套函数
• 单行函数可以嵌套。 • 嵌套函数的执行顺序是由内到外。
F3(F2(F1(col,arg1),arg2),arg3)
SQL> SELECT last_name, CONCAT (last_name, job) CAN, LENGTH(last_name) LEN, INSTR(last_name, 'A') INS FROM employees WHERE SUBSTR(job_id,1,5) = 'SALES'; LAST_NAME CON LEN INS

PL SQL函数大全

PL SQL函数大全

LPAD(,<i>[,])
c1,c2均为字符串,i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。c2的缺省值为单空格,参见RPAD。
select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe
STBSTR(,<i>[,])
c1为一字符串,i,j为整数,从c1的第i位开始返回长度为j的子字符串,如果j为空,则直到串的尾部。
select SUBSTR('Message',1,4) from dualSUBSMess
SUBSTRB(,<i>[,])
与SUBSTR大致相同,只是I,J是以字节计算。
NEXT_DAY(,)
返回日期d后由dow给出的条件的第一天,dow使用当前会话中给出的语言指定了一周中的某一天,返回的时间分量与d的时间分量相同。
select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004
select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54

plsql知识梳理-常用函数

plsql知识梳理-常用函数

plsql中很多的操作函数,我这边只是梳理了一些特常用的函数。

1 substr()substr(字段,a,b)a代表第几个位置b代表长度a参数中0和1的效果一样用负数则从右边开始数第几个位置如下图执行的效果2 concat()concat 函数只能连接2个字符串,不能一次性的连3个字符串。

3 lower,upperLower:返回字符串,并将所有的字符小写Upper:返回字符串,并将所有的字符大写4 Trim,Ltrim,Rtrimrim、Ltrim及Rtrim函数完成将字符串中的一部分或全部空格去掉。

Trim去掉字符串中的头部和未部空格。

Ltrim去掉字符串中起始的空格。

而Rtrim将字符串末尾的空格都去掉。

请看下图的执行效果5 to_char(n,format) 和to_date(string,format)to_char 就是将数值型或者日期型转化为字符型数值型函数规格化时 90.0999的含义是有9的地方如果是数字就显示如果没有数字就不显示;有0的地方在没有数字的时候也会有0来占位。

主要事项:1) 上图中的0.789数值经过to_char后再显示变成了.789。

2) 指定的FM格式会在按位截取小数的时候四舍五入了。

to_char ---日期格式的内容To_date()函数将char 或varchar2类型的值转化为一个Date值。

6 floor ceil round truncFLOOR——对给定的数字取整数位CEIL ——返回大于或等于给出数字的最小整数ROUND——按照指定的精度进行四舍五入,传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果TRUNC——按照指定的精度进行截取一个数trunc(x [,y]),其中如果没有指定y,则对x在0位小数上进行简单的截断. 如果y是负数,则对x在小数点左边的第|y|位处进行截断,对应负数,位数计算是从0开始的,小数点左一位为0位置。

PLSQL常用基本函数 11-10-19

PLSQL常用基本函数 11-10-19

PL/SQL常用基本函数--------------个人总结,如有错误,恳请指正Sum(字段名)计算number型字段的总和(一般跟having 连用,having对sum再做筛选;group by 除了要汇总的资料外,其他的全部要加在group by后面做附加条件)。

Decode(‘A’,‘a’,1, ‘b’,2, ‘c’,3, 4)意思是:A这一个变量,当‘A’=‘a’时,赋值1;‘A’=‘b’时,赋值2;‘A’=‘c’时,赋值3;其他情况,赋值4。

Upper (字段)对括号内的字段,进行小写转大写的转换。

Lower(字段)对括号内的字段,进行大写转小写的转换。

Trunc (字段)取整数,小数不要。

(+)秀空,一般用于资料较少的table一侧。

|| 并上的意思,一般用于两个栏位(字段,我个人习惯说成栏位,因为在后台看来就是一栏一栏的)似乎也可以用在tabel上,就是将两个表并在一起显示出来,个人没有试过,在书上看到过一次,也有可能是我看错了。

Months between(‘01-sep-95’,‘11-jan-94’)执行结果------19.6774194个月,由此可以猜测,这个函数的用法是计算括号中两个日期的一共有多少个月份。

Add_months(’11-jan-94’,6)执行结果------‘11-jul-94’,由此可以猜测,这个函数是将括号内的日期加上6(这个数字也可以是其它数字,根据所填写的为准)个月之后,得到新的日期。

Next_Day (’01-sep-95’,’F riday’)执行结果------‘08-sep-95’,由此可以猜测他是以括号内的日期为开始,计算到下一个星期五。

当前日期为‘25-jul-95’Round (sysdate,’month’)执行结果-----‘01-aug-95,由此可以猜测此函数是将括号内的日期自动跳转到下个月初。

类似的还有Rount (sysdate,’year’)自动跳转到明年年初。

PLSQL中的存储过程和函数

PLSQL中的存储过程和函数

PLSQL中的存储过程和函数PLSQL中的存储过程和函数语法:create [or replace] procedure procedure_name[(parament1 [model1] datatype1,parament2 [model2] datatype2,...)]is|asPL/SQL Block;举例:create or replace procedure raise_salary(p_id in employees.employee_id%type)isbeginupdate employeesset salary = salary * 1.10where employee_id = p_id;end;PLSQL存储过程d额参数模式:+ in 默认模式,⽤于把值传给过程;参数可以是常量、变量、表达式;可以赋予默认值+ out 必须显式指定;⽤于把值从过程返回给调⽤环境;必须是个变量;不能赋予默认值+ in out 必须显式指定;⽤于把变量传给过程,并返回给调⽤环境;必须是个变量;不能赋予默认值参数传递⽅式 ( 按顺序传递 或者 使⽤=>符号传递 ) :create or replace procedure query_emp(p_id in employees.employee_id%type,p_name out st_name%type,p_salary out employeees.salary%type,p_comm out mission_pct%type )beginselect last_name,salary,commission_pctinto p_name,p_salary,p_commfrom employeeswhere employee_id = p_id;end query_emp;PLSQL存储函数:CREATE OR REPLACE FUNCTION get_sal(p_id in number) RETURN NUMBER ISv_salary NUMBER;BEGINSELECT salaryINTO v_salaryFROM employeesWHERE employee_id = p_id;RETURN v_salary;END get_sal;调⽤:select get_sal(100) from dual;。

PLSQL中的时间函数总结

PLSQL中的时间函数总结

PLSQL中的时间函数总结带时分秒转换成⽇期类型to_date('20120801 00:00:00','yyyymmdd HH24:Mi:SS')六种⽇期函数:1. add_months(⽇期,number) 指定⽇期推迟number个⽉2. last_day(⽇期) 指定⽇期当⽉的最后⼀天3. new_time(⽇期,时区简写) 调整时区4. next_day(⽇期,number) number表⽰周⼏,星期⽇是1,指定number的⽇期(⼀周内或⼀周后)5. months_between(⽇期1,⽇期2) ⽇期1和⽇期2之间有⼏个⽉6. sysdate 系统当期那⽇期和时间==================================================================oracle plsql 对⽇期的处理函数和sql例⼦1.取时间点的年份的写法:select to_char(sysdate,'yyyy') from dual;2.取时间点的⽉份的写法:select to_char(sysdate,'mm') from dual;3.取时间点的⽇的写法:select to_char(sysdate,'dd') from dual;4.取时间点的时的写法:select to_char(sysdate,'hh24') from dual;5.取时间点的分的写法:select to_char(sysdate,'mi') from dual;6.取时间点的秒的写法:select to_char(sysdate,'ss') from dual;7.取时间点的⽇期的写法:select trunc(sysdate) from dual;8.取时间点的时间的写法:select to_char(sysdate,'hh24:mi:ss') from dual;9.⽇期,时间形态变为字符形态select to_char(sysdate) from dual;10.将字符串转换成⽇期或时间形态:select to_date('2003/08/01') from dual;11.返回参数的星期⼏的写法:select to_char(sysdate,'d') from dual;12.返回参数⼀年中的第⼏天的写法:select to_char(sysdate,'ddd') from dual;13.返回午夜和参数中指定的时间值之间的秒数的写法:select to_char(sysdate,'sssss') from dual;14.返回参数中⼀年的第⼏周的写法:select to_char(sysdate,'ww') from dual;PS:来⾃转载。

PLSQL函数参数

PLSQL函数参数

游标for循环--查询所有员工编号,姓名,工资declarecursor emp_cursor isselect *from employees;beginfor e IN emp_cursor loopdbms_output.put_line('编号:'||e.employee_id||'姓名:'||st_name||'工资:'||e.salary);end loop;end;--查询所有员工编号,姓名,工资(参数)declarecursor emp_cursor(p_dept_id employees.department_id%type)isselect *from employeeswhere department_id=p_dept_id;beginfor e in emp_cursor(90) loopdbms_output.put_line('编号:'||e.employee_id||'姓名:'||st_name||'工资:'||e.salary);end loop;end;declarebeginfor e in(select * from employees where department_id=60) loopdbms_output.put_line('编号:'|| e.employee_id ||'姓名'||st_name||'工资'||e.salary);end loop;end;--隐式游标--用户输入一个任意的部门编号,更新这个部门员工的工资如果有员工的工资被更新,输出‘更新成功’,有多少个员工被更新,如果没有,输出‘部门不存在’v_deptid number:=&input;beginupdate employeesset salary = salary+1where department_id=v_deptid;if sql%found thendbms_output.put_line('更新成功,有' || SQL%ROWCOUNT ||'个员工被更新');elsedbms_output.put_line('部门不存在');end if;commit;end;--动态游标--用户输入一个字母,输入E,查的是员工姓名,输入D,查的是部门名称select count(employee_id) from employees函数和过程ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
chartorowid(char) 字符串转换成rowid
rowidtochar(x) rowid转换成字符
floor(v) 小于或等于 的最大整数
cos(v) 余弦值
cosh(v) 反余弦值
exp(v) e为底的指数值
ln(v) 自然对数
log(v) 10为底的对数
oracle 的一PL/SQL 函数大全
1.字符函数
chr(int) 返回ASCII码
count(string,string) 连接两字符串
initcap(string) 首字母变大写
lower(string) 转换成小写
upper(string) 转换成大写
current_timestamp() 当前的时间和日期
4.转换函数
to_char(date,'format') 转换成字符串
to_number(char) 转换成数字
to_date(string,'format') 转换成指定格式的日期
ce(string,char[,char]) 替换字符串或是删除字符串
substr(string,start[,count]) 截取字符串
length(string) 串长度
2.数字函数
abs(value) 绝对值
ceil(value) 大于或等于 的最小整数
power(v,exponent) 指数值
round(value,p) 四舍五入
mod(v,divisor) 取余
sort(v) 平方根
3.日期函数
add_months(date,count) 增加count月后的日期
lpad(string,count[,char]) 在左边添加N个字符或空格
rpad(string,count[,char]) 在右边添加N个字符或空格
ltrim(string[,char]) 去掉串中左边的字符或是空格
rtrim(string[,char]) 去掉串中右边的字符或是空格
last_day(date) 月末日期
months_between(date1,date2)两日期之间的间隔月份
new_time(date,'this','other')转换时区时间
next_day(date,'day') 星期几的日期
sysdate() 系统日期
相关文档
最新文档