设为首页 收藏本站
查看: 1405|回复: 0

[经验分享] SQL 基础之单行函数(七)

[复制链接]

尚未签到

发表于 2018-10-20 13:07:43 | 显示全部楼层 |阅读模式
  单行 SQL 函数有如下几个分类:

  •   字符函数
  •   数字函数
  •   使用日期
  •   日期函数
  函数的使用原来说白了就是在函数使用过程中加入符合定义的参数,然后执行函数就能输出结果值了。
DSC0000.jpg

  单行函数和多行函数的区别:

  •   单行函数每行输出为一个结果
  •   多行函数每组行输出为一个结果
  单行函数:
  操作数据对象
  接受函数返回一个结果
  只对一行进行变换
  每行返回一个结果
  可以转换数据类型,计算,格式化
  可以嵌套
  参数可以是列、值或表达式
  function_name [(arg1, arg2,...)]
DSC0001.jpg

  字符函数:
  1、大小写转换函数:LOWER、UPPER、INITCAP
  这些函数转换字符串的大小写:
函数结果LOWER('SQL Course')结果全部是小写UPPER('SQL Course')结果全部是大写INITCAP('SQL Course')结果首字符大写  1.1、例如显示员工Walsh的员工编号,并且名字为小写:
  select lower(last_name),employee_id from employees where last_name='Walsh';
DSC0002.jpg

  1.2、例如显示员工Walsh的工资,并且名字为大写:
  select upper(first_name),salary from employees where first_name='Kevin';
DSC0003.jpg

  1.3、显示Kevin的last_name 、工资job_id 首字母大写
  select initcap(job_id), last_name,salary from employees where first_name='Kevin';
DSC0004.jpg

  1.4、从员工表中检索FIRST_NAME和LAST_NAME值,并且FIRST_NAME包含字符串“li”
  select first_name,last_name from employees where lower(first_name) like '%li%';
DSC0005.jpg

  2、字符处理函数:CONCAT、SUBSTR、LENGTH、INSTR、LPAD | RPAD、TRIM、REPLACE
名字函数结果 连接函数CONCAT('Hello', 'World')HelloWorld字符截取函数SUBSTR('HelloWorld',1,5)截取从1-5个字符Hello字符串统计长度LENGTH('HelloWorld')10 查找字符位置函数INSTR('HelloWorld', 'W')6 前填充函数LPAD(salary,10,'*')*****24000后填充函数RPAD(salary, 10, '*')24000*****替换函数  REPLACE ('JACK and JUE','J','BL')
BLACK and BLUE 字符剪切函数TRIM('H' FROM 'HelloWorld')elloWorld  2.1、将员工的first_name和last_name拼接在一起显示,并查找工资大于5000的员工信息
  select concat(first_name,last_name) name, employee_id,salary from employees  where salary>5000 order by salary desc;
DSC0006.jpg

  2.1.1、单独制造一个列信息,显示为****** infor的显示员工工资大于10000的信息
  select concat('*******','information') infor , job_id ,salary from employees where salary > 10000;
DSC0007.jpg

  2.1.2、由下图可知,concat函数只能拼接两列字符信息,到第三列就开始报错了
DSC0008.jpg

  2.2.1、截取员工名字前3个字母,并找到工资大于10000的员工名字
  select substr(first_name,1,3) fname, salary from employees where salary >10000;
DSC0009.jpg

  2.2.2、查看工资大于10000员工的名字长度
  select length(last_name),salary from employees where salary >10000;
DSC00010.jpg

  2.3.1、查找Ellen用户 l在第几个位置。
  select instr(first_name,'l'),salary from employees where first_name='Ellen';
DSC00011.jpg

  2.3.2、查找job_id 从第4位截取为REP的。
  select instr(first_name,'a'),salary,job_id from employees where substr(job_id,'4') ='REP';
DSC00012.jpg

  2.4.1、将工资设置为5位长度,不够的用*号前填充
  select first_name,lpad(salary,5,'*') from employees;
DSC00013.jpg

  2.5.1、查找工资显示10位,不足的用*号后填充
  select first_name,rpad(salary,10,'*') from employees;
DSC00014.jpg

  2.6.1、将员工名字开头为B的变成JC开头。
  select replace(first_name,'B','JC'),salary from employees order by first_name;
DSC00015.jpg

  2.7.1、将员工姓名首字母为A的,去掉A
  select trim('A' from first_name),salary from employees order by first_name;
DSC00016.jpg

  2.8 查看job_id第四位开始是REP的,查看first_name a在第几位置
  select employee_id,concat(first_name,last_name)  Name,job_id,length(first_name),instr(first_name,'a') "contains 'a'?"
  from employees where substr(job_id,4) = 'REP';
DSC00017.jpg

  2.9、公司计划给每名员工印制含有员工姓名的纪念品,为保持整体美观程度,现在要求员工的全名在
  16个字符内。当员工的FIRST_NAME和LAST_NAME的合并长度超过15个字符时,显示员工学名,。员
  工的名称由FIRST_NAME的首字母和LAST_NAME的前14个字符组成。
  【解题思路】首先确定where条件限制FIRST_NAME和LAST_NAME的合并长度超过15的员工进行过
  滤,然后在SELECT 子句后面使用字符函数进行处理。
  select first_name,last_name,substr(first_name,1,1)||' '||substr(last_name,1,14) format_name from employees where length(first_name)+length(last_name) >15;
DSC00018.jpg

  数值函数
函数示例结果ROUND:四舍五入到到指定的十进制值ROUND(45.926, 2)45.93TRUNC:将数字截尾取整TRUNC(45.926, 2)45.92MOD:返回余数MOD(1600, 300)100  这里使用DUAL来测试,这是一个‘伪表’,可以用来测试函数和表达式
  1、测试round函数三种方式
  select round(45.9234,2),round(45.923,0),round(45.923,-1) from dual;
  select round(45.9259,2),round(45.623,0),round(45.923,-1) from dual;
  通过上面两个语句测试可知:
  第一个为在小数点右侧截取2位,如果第三位是5就四舍五入
  第二个为标准小数点右侧第一位进行四舍五入
  第三个为小数点左侧进行四舍五入,不够进变成0,比如round(43.923,-1),结果变成40
DSC00019.jpg

DSC00020.jpg

  2、测试trunc函数三种方式
  SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(45.923,-1) FROM DUAL;
DSC00021.jpg

  SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(39.923,-1) FROM DUAL;
DSC00022.jpg

  SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(39.923,-2) FROM DUAL;
DSC00023.jpg

  命令分别为指定截取位数2位,默认截取小数点位右侧删除掉,删除掉小数点左侧第一位变成0
  当为-3的时候就表示截取3位,直接变成0
  3、测试mod函数查询销售部门的工资与5000取余数
  select last_name,salary,mod(salary,5000) from employees where job_id='SA_REP';
DSC00024.jpg

  日期函数
  Oracle内部使用数字存储日期: 世纪,年,月,日,小时,分钟,秒
  默认的日期显示格式为DD-MON-RR
  – 可以只指定年的后两位,允许存储21世纪日期在21世纪中
  – 同样,允许存储20世纪的日期在21世纪中
  RR 日期格式
当前年指定日期RR格式YY格式199527-OCT-9519951995199527-OCT-1720171917200127-OCT-1720172017200127-OCT-9519952095  使用 SYSDATE  函数
  SYSDATE 函数返回:
  日期
  时间
  select  sysdate from dual;
DSC00025.jpg

  日期的算术运算
  在日期上加上或减去一个数字结果仍为日期。

  •   两个日期相减返回日期之间相差的天数。
  •   可以用小时数除以24,可以加小时到日期上。
  1、查询90部门的员工都入职多少个星期了
  select last_name,(sysdate-hire_date)/7 as weeks from employees where department_id=90;
DSC00026.jpg

  2、查询30部门的员工都入职多少个月了
  select first_name,(sysdate-hire_date)/30 month from employees where department_id=30;
DSC00027.jpg

  日期操作函数
函数含义结果MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')两个日期相差的月数 19.6774194ADD_MONTHS  ('06-MAR-17',1)向指定日期中加上若干月数06-APR-17NEXT_DAY ('01-SEP-95','FRIDAY')指定日期的下一个日期  08-SEP-95
LAST_DAY ('01-SEP-95')本月的最后一天30-SEP-95假设当前为   DSC00028.jpg ROUND (SYSDATE,'MONTH')日期四舍五入01-MAR-17ROUND (SYSDATE ,'YEAR')日期四舍五入01-JAN-17TRUNC (SYSDATE ,'MONTH')日期截断01-MAR-17TRUNC (SYSDATE ,'YEAR')日期截断01-JAN-17  感觉上面这几个不太对,现在还没明白,回头再说
  1、查询截至01-JAN-2012已入职100月的员工信息包含EMPLOYEES,LAST_NAME和HIRE_DATE字段
  select last_name,hire_date,months_between('01-JAN-2012',hire_date) day from employees where months_between('01-JAN-2012',hire_date) >100;
DSC00029.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624102-1-1.html 上篇帖子: zabbix-server 的安装-centos7 下篇帖子: SQL 基础之转换函数和条件表达式(八)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表