3.使用单行函数——Oracle数据库学习日记

本文详细介绍了Oracle数据库中单行函数的使用,包括字符函数如大小写转换和字符控制,数值函数如ROUND和TRUNC,以及日期函数的运用,如日期算数运算和相关操作函数。通过实例展示了如何在SQL查询中应用这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用单行函数

函数是SQL的一个非常强大的特性,它可以用来做以下事情:

  • 对数据进行计算
  • 修改单个数据项
  • 操作行组的输出
  • 格式化显示日期和数字
  • 转换列数据类型

函数分单行函数的多行函数,单行函数用于操作数据项。他们接受一个或多个参数,并为查询返回的每一行返回一个值。可以是下列之一:

  • 用户提供的值
  • 变量值
  • 列名
  • 表达式

单行函数的特点包括:

  • 对查询中返回的每一行执行操作
  • 每行返回一个结果
  • 可能返回与引用的数据类型不同的数据值
  • 可能需要一个或多个参数
  • 可用于SELECT,WHERE,and ORDER BY子句;可以嵌套

单行函数类型:

  • 字符
  • 数值
  • 日期
  • 转换
  • 通用

1、字符函数

1.1大小写转换函数

这些函数转换字符串的大小写:

函数结果作用
LOWER(‘SQL COURSE’)sql course转换成小写
UPPER(‘sql course’)SQL COURSE转换成大写
INITCAP(‘SQL COURSE’)Sql Course首字母大写

实例

select initcap(ename),lower(job),upper(mgt)
	from emp
where ename='KING';

1.2字符控制函数

这些函数处理字符串:

函数结果含义
CONCAT(‘Hello’,‘World’)HelloWorld将值连接在一起(使用CONCAT只能使用两个参数)
SUBSTR(‘HelloWorld’,1,5)hello取一个确定长度的字符串
LENGTH(‘Hello World’)10取字符串的长度显示为数值
INSTR(‘HelloWorld’,‘W’)6查找指定字符的数字位置
LAPD(salary,10,’*’)*****24000使用字符表达式返回左填充到n个字符长度的表达式
RAPD(salary,10,’*’)24000*****使用字符表达式返回右填充到n个字符长度的表达式
REPLACE(‘JACK and JUE’,‘J’,‘BL’)BLACK and BLUE查找字符,并进行替换字符
TRIM(’ ’ FROM ‘xxxHello Worldxxx’)HelloWorld从字符串中修剪开头或结尾的字段

实例
CONCAT:

select concat('good','dba') 
    from dual;
    
select concat(concat(ename,'is'),job)
    from emp;

SUBSTR:

select substr('oracle',1,3)
    from dual;

LENGTH:

select length('oracle')
    from dual;

INSTR:

select instr('oracle','a')
    from dual;  # instr经常被用来判断,判断一个字符串是否在另一个字符串中

select instr('1*2*3*4*5*','*',3,4)
    from dual;  # 查询从第3个字符开始,*第4次出现的位置
    
select instr('1*2*3*4*5*','*',-3,2)
    from dual;  # 查询从倒数第3个字符开始向前,*第2次出现的位置

LPAD,RPAD:

select sal,lpad(sal,4,0),rpad(sal,4,0)
    from emp;

TRIM:

select trim(' hello  ' )
   from dual;
   
select length('  hello  '),length(trim(' hello   '))
   from dual;

2、数值函数

以下函数为处理数值的函数:

函数结果含义
ROUND(45.926,2)45.93四舍五入到指定的的十进制值
TRUNC(45.926,2)45.92截断到指定十进制值
MOD(1600,300)100返回余数

ROUND:

SQL> select round(45.923,2),round(45.923,0),round(45.923,-1)
  2     from dual;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- --------------- ----------------
          45.92              46               50

TRUNC:

SQL> select trunc(45.923,2),trunc(45.923),trunc(45.923,-1)
  2     from dual;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
--------------- ------------- ----------------
          45.92            45               40

MOD:

SQL> select mod(1600,300)
  2     from dual;

MOD(1600,300)
-------------
          100

3.日期函数

3.1使用日期

  • Oracle内部使用的数字存储日期:世纪、年、月、日、小时
  • 默认的日期显示格式为DD-MON-RR

修改当前session日期格式

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss day';
Session altered.
SQL> select sysdate
  2     from dual;
SYSDATE
-----------------------------
2019-07-20 09:45:01 saturday

日期的算数运算:

命令结果含义
date ± numberDate在日期上加上或减去一个数字,结果仍为日期
date - dateNumber of days两个日期相减返回日期之间的相差天数
date + number/24Date可以用小时数除以24,可以加小时到日期上

因为数据库将日期存储为数字,所以可以使用加法和减法等算数运算符执行计算,你可以加减数字常数和日期
实例

SQL> select ename,(sysdate-hiredate)/365 as year
  2     from emp;

ENAME            YEAR
---------- ----------
SMITH      38.6148401
ALLEN      38.4367579
WARD       38.4312784

3.2日期操作函数

函数含义
SYSDATE查看当前系统日期时间
MONTHS_BETWEEN两个日期相差的月数
ADD_MONTHS向指定日期中添加若干月数
NEXT_DAY指向日期的下一个日期
LAST_DAY本月的最后一天
ROUND日期四舍五入
TRUNC日期截断

SYSDATE:

SQL> SELECT SYSDATE
  2     FROM DUAL;

SYSDATE
-----------------------------
2019-07-20 10:09:06 saturday

MONTHS_BETWEEN:

SQL> select ename,months_between(sysdate,hiredate)/12 as year
  2     from emp;

ENAME            YEAR
---------- ----------
SMITH      38.5925309
ALLEN      38.4166667
WARD       38.4124233

ADD_MONTHS:

select sysdate,add_months(sysdate,1) from dual;     # 一个月后的现在
select sysdate,add_months(sysdate,12) from dual:        # 一年后
select sysdate,add_months(sysdate,-12) from dual;       # 一年前

NEXT_DAY:

select next_day(sysdate,'MONDAY') from dual;        # 下周一(当前时间)
select next_day(sysdate,2) from dual;       # 下周第二天——下周一(周日为第一天)

LAST_DAY:

select sysdate,last_day(sysdate) from dual;

ROUND:

select sysdate,round(sysdate) from dual;
select sysdate,round(sysdate,'mi') from dual;
select sysdate,round(sysdate,'DD') from dual;

TRUNC:

select sysdate,trunc(sysdate) from dual;        今天
select sysdate,trunc(sysdate,'dd') from dual;       零点
select sysdate,trunc(sysdate,'mm') from dual;       本月的第一天
select sysdate,trunc(sysdate,'yyyy') from dual;     今年的第一天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值