在SQL中使用单行函数

    xiaoxiao2022-07-09  229

    使用单行函数自定义输出

    SQL函数 首先;函数是SQL的一个非常强大的特性。我们可以用来做一下事情: 对数据进行计算 修改单个数据项 操作行组的输出 格式化显示日期和数字 转换列数据类型

    函数类型

    单行函数:只对单个行进行操作,每行返回一个结果 多行函数:可以操作行来为每组行提供一个结果。

    单⾏函数: 操作数句对象 接收函数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是列,值或表达式

    单⾏函数的特点包括: • 对查询中返回的每⼀⾏执⾏操作 • 每⾏返回⼀个结果 • 可能返回与引⽤的数据类型不同的 数据值 • 可能需要⼀个或多个参数 • 可⽤于SELECT, WHERE, and ORDER BY⼦句;可以嵌套

    单行函数包括:

    字符函数:接受字符输⼊,可以同时返回 字符值和数字值

    数字函数:接受数字输⼊并返回数值

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

    dual表 DUAL 表是⼀个“伪表”(虚拟表), 只包含⼀个列 DUMMY,数据类型为 VARCHAR2(1)。 DUAL 表只包含⼀⾏,其 DUMMY 列的值为 X

    DUAL 表是为了语法上的完整性。 可用于计算等

    字符函数 1、大小写转换函数 LOWER(‘SQL Course’) = sqlcourse 变小写 UPPER(‘SQL Course’) = SQL COURSE 变大写 INITCAP(‘SQL Course’) = Sql Course 首字符变大写

    例如: select lower(‘DD’) from dual

    select upper(‘dd’) from dual

    字符控制函数

    • CONCAT 链接字符串、列、表达式 • SUBSTR 截取字符串 • length 获取⾃出此案⻓度(字符数) • instr 后⾯字符串在前⾯字符串第⼀次出现的位置 • LPAD, RPAD 左补全, 右补全 • TRIM 去掉前后空格,或者 从后⾯串 ⾸尾去掉前⾯字符

    官⽅⽂档位置: SQL Language Reference -> 5 Functions **官网中有更多命令可查询

    数值函数

    • ROUND:四舍五⼊到制定的⼗进制值 • TRUNC : 截断到制定⼗进制值 • MOD : 返回余数 例如 select round(45.926,2)from dual;


    45.93

    在45.926这个数中 保留两位小数并四舍五入

    select trunc(87.96464,3) from dual;


    87.964

    在87.96464这个数中 直接保留三位小数

    select ename , sal , MOD(sal,20) from emp; 在所有人员中,计算工资除以20后的余数 ENAME SAL MOD(SAL,20)


    SMITH 800 0 ALLEN 1600 0 WARD 1250 10 JONES 2975 15 MARTIN 1250 10 BLAKE 2850 10 CLARK 2450 10 SCOTT 3000 0 KING 5000 0 TURNER 1500 0 ADAMS 1100 0 MOD 余数运用

    使⽤⽇期 • Oracle内部使⽤数字存储⽇期:世纪、年、⽉、⽇、⼩时 • 默认的⽇期显示格式为 DD-MON-RR

    修改时间格式 alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss day’;

    查询 select sysdate from dual;

    ⽇期的算术运算 • 在⽇期上加上或减去⼀个数字结果仍为⽇期 • 两个⽇期相减返回⽇期之间的相差天数 • 可以⽤⼩时数除以24,可以加⼩时到⽇期上

    因为数据库将⽇期存储为数字,所以可以使⽤加法和减法等算术运算符执⾏计算。你可以加减数字常数和⽇期。

    ⽇期运算 select sysdate+1 from dual; 1天以后 select sysdate,sysdate+1/24 from dual; 1⼩时后 select sysdate,sysdate+1/24/60 from dual; 1分钟后

    months_between 两个时间相差多少 select empno,ename,sal, months_between(sysdate,hiredate) months from emp

    add_months ⽇期增加⽉份 select sysdate from dual; 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; round ⽇期四舍五⼊ select sysdate,round(sysdate) from dual; select sysdate,round(sysdate,‘mi’) from dual; select sysdate,round(sysdate,‘DD’) from dual; last_day ⽇期增加⽉份 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; 今年的第一天

    ⽇期操作函数

    ⽇期函数使⽤ROUND和TRUNC 使⽤转换函数和条件表达式

    转换函数 隐式数据类型转换:在后台转换 隐式数据类型转换:数据类型与默认格式匹配 ######建议不使用隐试数据转换######

    隐式数据类型转换是在Oracle服务器⾃动完成下列转换 例如,表达式hire_date > ’01-JAN-90’会导致从字符串’01-JAN-90’到⽇期的隐式转换。 因此,可以隐式地将VARCHAR2或CHAR值转换为表达式中的数字或⽇期数据类型。

    通常,当需要数据类型转换时,Oracle服务器使⽤表达式规则。 例如,grade列是CHAR(2)类型。 表达式grade = 2 将导致数值2隐式转换为字符串“2”,

    在图中,我们能看到可以由数字转字符 由日期转字符 但是不能日期转数字

    最新回复(0)