SQL 单行函数输出

本文介绍了SQL中的单行函数,包括字符、数字和日期函数的用法。字符函数如LOWER、UPPER、TRIM等用于字符串处理;数字函数如ROUND、MOD等用于数值计算;日期函数如SYSDATE、ADD_MONTHS和MONTHS_BETWEEN等用于日期操作。这些函数增强了SQL查询的功能,使得数据处理更加灵活。

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

SQL 函数
函数是SQL的一个非常强大的特性:
对数据进行计算
修改单个数据项
操作行组的输出
格式化显示日期和数字
转换列数据类型

在SQL中有不同类型的函数,包括单行函数和多行函数。单行函数只对单个行进行操作,每行返回一个结果。多行函数可以操作行组来为每组行提供一个结果。
函数使基本查询更强大,本文主要介绍其中的单行函数,它侧重于单行字符、数字和日期函数。

单行函数:

1. 应用范围
用于操作数据项。接受一个或多个参数,并为查询返回的每一行返回一个值。可以是下列之一:
用户提供的值
变量值
列名
表达式

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

3. 主要分类
a 字符函数:接受字符输入,可以同时返回数字值和数字值

b 数字函数:接受数字输入并返回数值

c 日期函数 :操作日期数据类型的值(所有日期函数返回的值为日期数据类型,但 MONTHS_BETWEEN 函数除外,它返回一个数字。

1 字符函数
主要包括 大小写转换函数 字符处理函数
LOWER CONCAT
UPPER SUBSTR
INITCAP LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
大小写转换函数

小写转换:
SQL> select ename,lower(ename)
2 from emp;

ENAME      LOWER(ENAM
---------- ----------
SMITH      smith
ALLEN      allen
WARD       ward
JONES      jones
MARTIN     martin
BLAKE      blake
CLARK      clark
SCOTT      scott
KING       king
TURNER     turner
ADAMS      adams
JAMES      james
FORD       ford
MILLER     miller

14 rows selected.

首字母大写转换:

SQL> select ename,initcap(ename)
  2  from emp; 

ENAME      INITCAP(EN
---------- ----------
SMITH      Smith
ALLEN      Allen
WARD       Ward
JONES      Jones
MARTIN     Martin
BLAKE      Blake
CLARK      Clark
SCOTT      Scott
KING       King
TURNER     Turner
ADAMS      Adams
JAMES      James
FORD       Ford
MILLER     Miller

14 rows selected.

字符控制函数

concat 函数:将值连接在一起(使用concat只能使用两个参数)

SQL> select concat('good ','dba') from dual;

CONCAT('
--------
good dba

substr 函数: 取一个确定长度的字符串

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

SUB
---
ora

length 函数: 将字符串的长度显示为数值

SQL> select length('oracle') from dual;

LENGTH('ORACLE')
----------------
               6

instr 函数: 后面字符串在前面字符串第一次出现的位置,instr 经常来做判断,判断一个字符串是否在另外一个字符串中。

SQL> select instr('oracle','a') from dual;

INSTR('ORACLE','A')
-------------------
                  3

lapd 、 rpad 函数:左补全, 右补全
使用字符表达式返回左、右填充到n个字符长度的表达式

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

       SAL LPAD(SAL RPAD(SAL
---------- -------- --------
       800 0800     8000
      1600 1600     1600
      1250 1250     1250
      2975 2975     2975
      1250 1250     1250
      2850 2850     2850
      2450 2450     2450
      3000 3000     3000
      5000 5000     5000
      1500 1500     1500
      1100 1100     1100
       950 0950     9500
      3000 3000     3000
      1300 1300     1300

14 rows selected.

replace 函数:替换函数 查找字符,并进行替换字符

SQL> select replace(13199105196,19910519,'*') from dual;

REPLACE(130
-----------
13*6

trim 函数 :从字符串中修剪开头或结尾的字符

SQL> select trim(' hello ') from dual;

TRIM(
-----
hello

数值函数:
round函数 : 四舍五入到制定的十进制值

 SQL> select round(324.43288,3) from dual;

ROUND(324.43288,3)
------------------
           324.433

SQL> select round(43.424,-1) from dual;

ROUND(43.424,-1)
----------------
              40

SQL> select round(47.3242,-1) from dual;

ROUND(47.3242,-1)
-----------------
               50

trunc 函数:截断到制定的十进制值

SQL> select trunc(45.957,2) from dual;

TRUNC(45.957,2)
---------------
          45.95

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

TRUNC(47.4323,-1)
-----------------
               40
SQL> select trunc(354.4323,2) from dual;

TRUNC(354.4323,2)
-----------------
           354.43

mod 函数: 返回余数

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

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

日期函数

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

sysdate 函数 :SYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间。
可以像使用任何其他列名一样使用SYSDATE

修改当前session日期格式

alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss day’;

日期的算术运算
在日期上加上或减去一个数字结果仍是日期
两个日期相减返回日期之间的相差天数
可以用小时数除以24,可以加小时到日期上

# 1天以后 系统时间加1天

SQL> select sysdate+1 from dual;

SYSDATE+1
---------
23-MAY-19

#1小时后

SQL> select sysdate,sysdate+1/24 from dual;

SYSDATE             SYSDATE+1/24
------------------- -------------------
2019-05-22 18:48:45 2019-05-22 19:48:45

#1分钟后

SQL> select sysdate,sysdate+1/24/60 from dual;

SYSDATE             SYSDATE+1/24/60
------------------- -------------------
2019-05-22 18:49:19 2019-05-22 18:50:19

日期操作函数
months_between : 两个日期相差的月数

SQL> select empno,ename,sal,months_between(sysdate,hiredate) months from emp;

     EMPNO ENAME             SAL     MONTHS
---------- ---------- ---------- ----------
      7369 SMITH             800 461.186616
      7499 ALLEN            1600 459.089842
      7521 WARD             1250        459
      7566 JONES            2975 457.670487
      7654 MARTIN           1250 451.831778
      7698 BLAKE            2850 456.702745
      7782 CLARK            2450 455.444681
      7788 SCOTT            3000   385.1221
      7839 KING             5000 450.186616
      7844 TURNER           1500 452.476939
      7876 ADAMS            1100 383.993068

     EMPNO ENAME             SAL     MONTHS
---------- ---------- ---------- ----------
      7900 JAMES             950 449.638229
      7902 FORD             3000 449.638229
      7934 MILLER           1300 447.993068

14 rows selected.

add_months 函数 : 向指定日期中加上若干月数

#一个月后的现在

SQL> select sysdate,add_months(sysdate,1) from dual;

SYSDATE             ADD_MONTHS(SYSDATE,
------------------- -------------------
2019-05-22 18:52:09 2019-06-22 18:52:09

#一年后

SQL> select sysdate,add_months(sysdate,12) from dual;

SYSDATE             ADD_MONTHS(SYSDATE,
------------------- -------------------
2019-05-22 18:52:45 2020-05-22 18:52:45

#一年前

SQL> select sysdate,add_months(sysdate,-12) from dual;

SYSDATE             ADD_MONTHS(SYSDATE,
------------------- -------------------
2019-05-22 18:53:23 2018-05-22 18:53:23

next_day 函数 : 指定日期的下一个日期

#从当前时间起下一个周一
SQL> select next_day(sysdate,‘MONDAY’) from dual;

NEXT_DAY(SYSDATE,'M
-------------------
2019-05-27 18:54:18

#从当前时间起下一个周一

SQL> select next_day(sysdate,2) from dual;

NEXT_DAY(SYSDATE,2)
-------------------
2019-05-27 18:57:13

last_day 本月的最后一天

#当前时间月份的最后一天

SQL> select sysdate,last_day(sysdate) from dual;

SYSDATE             LAST_DAY(SYSDATE)
------------------- -------------------
2019-05-22 18:58:26 2019-05-31 18:58:26

round : 日期四舍五入

#系统时间天数取整,取到天

SQL> select sysdate,round(sysdate) from dual;

SYSDATE             ROUND(SYSDATE)
------------------- -------------------
2019-05-22 18:59:52 2019-05-23 00:00:00

#系统时间分钟取整

SQL> select sysdate,round(sysdate,'mi') from dual;

SYSDATE             ROUND(SYSDATE,'MI')
------------------- -------------------
2019-05-22 19:00:44 2019-05-22 19:01:00

#系统时间天数取整

SQL> select sysdate,round(sysdate,'dd') from dual;

SYSDATE             ROUND(SYSDATE,'DD')
------------------- -------------------
2019-05-22 19:01:36 2019-05-23 00:00:00

trunc 日期截断

#截取系统时间到天

SQL> select sysdate,trunc(sysdate) from dual;

SYSDATE             TRUNC(SYSDATE)
------------------- -------------------
2019-05-22 19:03:28 2019-05-22 00:00:00

#零点

  SQL> select sysdate,trunc(sysdate,'dd') from dual;
    
    SYSDATE             TRUNC(SYSDATE,'DD')
    ------------------- -------------------
    2019-05-22 19:04:16 2019-05-22 00:00:00

#本月的第一天

SQL> select sysdate,trunc(sysdate,'mm') from dual;

SYSDATE             TRUNC(SYSDATE,'MM')
------------------- -------------------
2019-05-22 19:04:57 2019-05-01 00:00:00

#今年的第一天

SQL> select sysdate,trunc(sysdate,'yyyy') from dual;

SYSDATE             TRUNC(SYSDATE,'YYYY
------------------- -------------------
2019-05-22 19:05:34 2019-01-01 00:00:00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值