美文网首页
Oracle PL/SQL(15) - 常用函数

Oracle PL/SQL(15) - 常用函数

作者: 乘风破浪的姐姐 | 来源:发表于2020-05-19 17:35 被阅读0次

Oracle SQL 提供了用于执行特定操作的专用函数。这些函数增强了 SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 Oracle 数据库中主要使用两种类型的函数:

  1. 单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。
    例如:MOD(x,y)返回 x 除以 y 的余数(x 和 y 可以是两个整数,也可以是表中的整数列)。常用的单行函数有:
    字符函数:对字符串操作。
    数字函数:对数字进行计算,返回一个数字。
    转换函数:可以将一种数据类型转换为另外一种数据类型。
    日期函数:对日期和时间进行处理。

  2. 聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。例如:SUM(x),返回结果集中 x 列的总合。

以下详细介绍各类函数的使用。
(1)转换函数
转换函数将值从一种数据类型转换为另外一种数据类型。
TO_DATE(X,[,fmt]) 把一个字符串以fmt格式转换成一个日期类型
具体如何输出需要看本地PL/SQL的首选项设置时间格式设置。以下例子的输出结果,格式均为 yyyy/mm/dd hh:mi:ss

--将字符串转换为日期
SELECT TO_DATE('2019-12-31', 'yyyy-mm-dd') FROM DUAL;--输出:2019/12/31
SELECT TO_DATE('2019-12-31 15:20:45', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; --输出:2019/12/31 15:20:45
SELECT TO_DATE('2019年12月31日', 'yyyy"年"mm"月"dd"日') AS T FROM DUAL;--输出:2019/12/31
--两个日期间的天数      
SELECT FLOOR(SYSDATE - TO_DATE('20191201', 'yyyymmdd')) FROM DUAL;--输出:170
--查询某个时间段内的数据
select * from  t_user l 
where l.start_date between to_date(q'/2020-05-12 00:00:00/', 'yyyy-mm-dd hh24:mi:ss')
and to_date(q'/2020-05-12 23:00:00/', 'yyyy-mm-dd hh24:mi:ss');

TO_CHAR:转换为字符串

--日期转化为字符串 
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') AS NOWTIME FROM DUAL;   --2020-05-19 16:09:38
--获取时间的年
SELECT TO_CHAR(SYSDATE, 'yyyy') AS NOWYEAR FROM DUAL;          --  2020 
--获取时间的月
SELECT TO_CHAR(SYSDATE, 'mm') AS NOWMONTH FROM DUAL;           --  05  
--获取时间的日
SELECT TO_CHAR(SYSDATE, 'dd') AS NOWDAY FROM DUAL;             --  19 
--获取时间的时
SELECT TO_CHAR(SYSDATE, 'hh24') AS NOWHOUR FROM DUAL;          --   16
--获取时间的分
SELECT TO_CHAR(SYSDATE, 'mi') AS NOWMINUTE FROM DUAL;          --   10
--获取时间的秒
SELECT TO_CHAR(SYSDATE, 'ss') AS NOWSECOND FROM DUAL;          --   26 

TO_NUMBER(X,[,fmt]) 把一个字符串以fmt格式转换为一个数字
SELECT TO_NUMBER('-$12,345.67','$99,999.99')"num" FROM dual;
结果:-12345.67

(2)字符函数
字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。

INSTR (string, set[, start[, occurrence] ] ),该命令“string”中从“start”位置开始查找字符集合的位置,再查找“set”出现的第一次、第二次等等的“occurrence”(次数)。“start”的值也可以是负数,代表从字符串结尾开始向反方向搜索。

select instr('abc','a') from dual;    -- 返回 1 
select instr('abc','bc') from dual; -- 返回 2
select instr('abc abc','a',1,2) from dual; -- 返回 5
select instr('abc','bc',-1,1) from dual; -- 返回 2
select instr('abc','d') from dual; -- 返回 0

LTRIM(string,trim_set)从左边删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set” 是要去掉的字符的集合。

SELECT LTRIM('abcdab','a') FROM DUAL;

结果:bcdab

RTRIM(string,trim_set)从右侧删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set” 是要去掉的字符的集合。

SELECT RTRIM('abcdef', 'f') FROM DUAL;

结果:abcde

REPLACE(string, if, then)用 0 或其他字符代替字符串中的字符。“if”是字符或字符串,对于每个出现在“string”中的“if”,都用“then”的内容代替。

SELECT REPLACE('JACK and JUE','J','BL') FROM DUAL;

结果:BLACK and BLUE

SUBSTR(string, start [,count])返回“string”中截取的一部分。该命令截取“string”的一个子集,从“start”位置开始,持续“count”个字符。如果不指定“count”,则从“start”开始截取到“string”的尾部。

SELECT SUBSTR('ABCDEFGIJKLM',3,4) FROM DUAL;

结果:CDEF

TRANSLATE(string, if, then)“if”中字符的位置,并检查“then”的相同位置,然后用该位置的字符替换 “string”中的字符。

SELECT TRANSLATE('sdfdfAEIOU3333','AEIOU', '1111') FROM DUAL;

结果:sdfdf11113333

UPPER(string) 返回大写的“string”。

SELECT UPPER('aptech computer education') FROM dual;

结果:APTECH COMPUTER EDUCATION

(3)数值型常用函数
数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。

round 取四舍五入的几位小数

select round(1.2345, 3) from dual;

结果:1.235

trunc(x,[y]) 返回截尾到y位小数的x值
y是正整数,就是四舍五入到小数点后 y 位。TRUNC (5.654,2)=5.65。
y 是负整数,四舍五入到小数点左边|y|位。TRUNC (351.654,-2)=300。

select trunc(1.2345, 2) from dual;

结果:1.23

select     trunc(23.33)   from  dual;  

结果: 23

select trunc(1.2399, 2) from dual;

结果:1.23

select CASE WHEN trunc(1.00)-1.00=0  THEN  '整数' ELSE  '不是整数' END from dual;

结果:整数

ceil(n) 返回大于或等于x的最大整数

select  ceil(23.33)    from     dual;  

结果: 24

floor(n) 返回等于或小于n的最大整数:

select    floor(23.33)   from  dual;  

结果: 23

round(n,m) 将n四舍五入,保留小数点后m位

select round(123.5678,2) from dual; 

结果: 123.57

select    round(23.33)  from   dual;

结果: 23

mod(m,n) m除以n的余数,若n=0,则返回m

select mod(7,5) from dual; 

结果: 2

sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1

select sign(12) from dual; 

结果: 1

power(m,n) m的n次方

select power(3,2) from dual; 

结果: 9

sqrt(n) n的平方根

select sqrt(25) from dual ; 

结果: 5

(4)常用字符函数
字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。

initcap(char) 把每个字符串的第一个字符换成大写

select initicap('mr.ecop') from dual; 

结果: Mr.Ecop

lower(char) 整个字符串换成小写

select lower('MR.ecop') from dual; 

结果: mr.ecop

replace(char,str1,str2) 字符串中所有str1换成str2

select replace('Scott','s','Boy') from dual; 

结果: Boycott

substr(char,m,n) 取出从m字符开始的n个字符的子串

select substr('ABCDEF',2,2) from dual; 

结果: CD

length(char) 求字符串的长度

select length('ACD') from dual; 

结果: 3

|| 并置运算符

select 'ABCD'||'EFGH' from dual; 

结果: ABCDEFGH

(5)聚合函数
聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值等。
AVG(表达式)求平均值
SUM(表达式) 求和
MIN(表达式)、MAX(表达式) 最小值、最大值
COUNT(表达式)数据统计

(6)其它单行函数
NVL(exp1,exp2):如果 exp1的值为null,则返回exp2的值,否则返回exp1的值。
SELECT ename,NVL(col, 0) FROM TEST; --如果col列为null,则返回0

NVL2(exp1,exp2,exp2):
如果exp1的值为null,则返回exp2的值,否则返回exp3的值。

相关文章

  • Oracle PL/SQL(15) - 常用函数

    Oracle SQL 提供了用于执行特定操作的专用函数。这些函数增强了 SQL 语言的功能。函数可以接受零个或者多...

  • Oracle 中 decode 函数用法

    decode()函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函...

  • PL/SQL

    1.什么是PL/SQL PL/SQL(Procedure Language/SQL)PL/SQL是Oracle对s...

  • JAVA学习笔记(PL/SQL)

    1.1什么是PL/SQL PL/SQL(ProceduralLanguage/SQL)是Oracle在标准SQL的...

  • PL_SQL_Oracle基础教程.pdf

    【下载地址】 PL /SQL基础教程-PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL...

  • PL/SQL基础

    1.PL/SQL pl/sql (procedural language/sql) 是 Oracle 在标准的 s...

  • oracle工具PL/SQL快速入门1简介

    什么是PL/SQL? PL/SQL是Oracle中使用的结构化查询语言(SQL)的扩展。 与SQL不同,PL/SQ...

  • 1- Oracle Select语句

    Oracle PL/SQL FROM子句用于列出Oracle查询所需的表和所有连接信息。 语法 Oracle PL...

  • ORACLE 常用PL/SQL备忘

    ORACLE 多表关联 UPDATE 语句 Oracle中的EXISTS与IN 改字段类型 列转行函数 Oracl...

  • pl/sql

    PL/SQL 特点: PL/SQL是过程语言。 PL/SQL中存在过程构造和数据库访问。 在Oracle服务器和客...

网友评论

      本文标题:Oracle PL/SQL(15) - 常用函数

      本文链接:https://www.haomeiwen.com/subject/qtdrihtx.html