三、sql基础:单行函数--【Oracle数据库】

原创 2018年04月16日 19:45:54

三、单行函数(Single function)

3.1 字符函数(Character function)
3.1.1 大小写转换函数(Case-manipulation functions)
Lower("ABCdef")  --> abcdef
UPPER("ABCdef")  --> ABCDEF
INITCAP(abc def)  --> Abc Def

示例:
Oracle数据库中的数据是大小写敏感的,student变表的name字段有一个值是XIAOMING,我们去查:select * from student where name = ‘xiaoming’;查不出数据,我们应该把name这一列全部转化为小写再去匹配’xiaoming’:
select * from student where Lower(name) = ‘xiaoming’;

3.1.2 字符串转换函数(Character-manipulation functions)
Concat("hello","World")  --> helloWorld
Substr("helloworld",1,5)  --> hello  --从第1位开始截取5位
Substr("helloworld",6)  -->world  --从第6位截到最后
Length("helloworld")  --> 10
Instr("helloworld","w")  --> 6  --在第一个参数中第几位
Lpad('12345',10,"*")  --> *****12345  --向左用*补齐到10位
Rpad('12345',10,"*")  -->12345*****
Trim('h' from 'helloworld')  -->elloworld
Trim('helloworld')  -->去掉字符串前后的空格

3.2 数字操作函数
round(123.234,2)  -->123.23  --保留两位(四舍五入)
trunc(123.234,2)  -->123.23  --保留两位(无四舍五入)
mod(1600,300)  -->100  --求余数

例外:
round(45.66,-1) –> 50 -1表示保留小数点前1位(四舍五入)


3.3日期操作函数

注意:
oracle中的日期格式是:DD-MMM-YY (01-SEP-95),在我们的数据库中设置了默认的日期格式是oracle的话,在下面的函数中输入该格式的字符串就会默认是一个Data类型,而输入一个常用的’2017/09/08’就会被认为是个字符串,后面有两个函数解决这个问题。
实际开发中常用YYYY/MM/DD

months_between('01-SEP-95','11-JAN-94')  --> 19.67741  1995年9月1日比1994你那1月11日大了19个月
add_months('11-JAN-94',6)  -->11-Jul-94  加6个月
next_day('01-SEP-95','FRIDAY')  -->下一个星期五
next_day('01-SEP-95',1)  -->下一个周的第一天(周日)
last_day('01-SEP-95')  -->这个月的最后一天
round('25-JUL-95','MONTH')  -->1-Aug-95  把日期舍弃并四舍五入[95年8月25号-->95年9月1号]
round('25-JUL-95','YEAR')  -->舍弃月份并四舍五入
trunc('25-JUL-25','MONTH')
trunc('25-JUL-25','YEAR')  -->无四舍五入
补充round(sysdate,'yyyy') -->2018/1/1
3.3.1 关于日期类型的两个转换函数

(1)字符串转日期
to_date(‘2016/07/01’,’yyyy/mm/dd’)
(2)日期类型转字符串
to_char(sysdate,”yyyy/mm/dd hh:mi:ss”)

3.3.2 用我们常用的日期格式操作上面的函数
next_day('2017/09/08',1)  ---> 报错,原因见开头注意
next_day(to_date('2017-09-08','YYYY-MM-DD'),1)  -->正确。

也就是说,上面几个函数第一个参数要接受一个Date,之所以上面写的’01-SEP-95’这种不报错是因为数据库设置了默认日期格式是oracle格式。

3.3.3 日期运算

日期是可以运算的,例如有一张表,包含了入职日期(hire_date)列,那我要算入职周数呢?
select (sysdate - hire_date)/7 as weeks from emp;
结果:
—————————
| WEEKS(SYSDATE-HIRE_DATE) |
—————————
| 9 |
—————————


3.4 不同类型的数据转换
3.4.1 隐式转换(oracle自动转换,不需要我们写函数)

对于赋值语句:
varchar2/char –> number
varcgar2/char –> date
number –> varchar2
date –> varchar2
[需要注意的是,字符串和日期相互转换时,只有符合oracle日期格式的才能装换]

对于表达式比较操作:
varchar2/char –> number
varchar2/char –> date
[日期同上]
实例
select * from student where name = 123; –> 报错
oracle不会把123转换为字符串类型,而是会把name中的字符串转换成为123这种数字类型,xiaoming123这种字符串转换即报错。

3.4.2 显式转换
to_number() -- varchar --> number
to_char()  -- number/date --> varchar
to_date()  -- varchar --> date

日期转字符串
to_char(date , ‘formate’)
format:格式yyyy-mm-dd,可以不写

数字转字符串
to_char(number , ‘format’)
这里也是可以通过format控制格式:
9 表示一个数字
0 强制显示0
S 放一个$
L 放一个当前环境的币种
. 显示一个小数点
, 显示一个千分位
实例:比如我们要显示格式化的薪资
select salary , to_char(salary , ‘L99,999.00’) from employees;
结果: 6000.00 ¥6,000.00

字符串转数字
to_number(char , ‘format’);
按格式转,这样例如’¥8900’这种字符串都可以直接转成8900数字。
to_number(‘8900,99999’);这样才不会报错。


3.5 其他常用单行函数
nvl(ex1 , ex2)  --> 如果ex1为空,则返回ex2
nvl(ex1 ,ex2 , ex3)  --> 如果ex1为空,则返回ex3,不为空,则返回ex2
nullif(ex1 , ex2)   --> 如果ex1和ex2相等,则返回空,否则返回ex1;
coalesce(ex1,ex2,ex3.....,exn)   --> 从ex1开始往后找,直到找到一个不为空的,返回,结束。没找到,返回NULL

3.6 条件表达式
3.6.1 CASE语句

根据不同的职位显示不同的薪水

select emp_name , job_id , salary,
        case job_id
            when 'IT_PROG' then 1.1*salary
            when 'ST_PROG' then 1.2*salary
            else
                salary
        end "SHOW_SALARY" from emp;
    结果:
    ----------------------------------
    | EMP_NAME | SALARY | SHOW_SALARY | 
    ----------------------------------
    | zhao     | 1000   | 1100        |
    ----------------------------------
3.6.2 decode语句

同上:

select emp_name , job_id , salary,
        decode(job_id,
            'IT_PROG' ,
            1.1*salary ,
            'SG_PROG' ,
            1.2*salary ,
            salary
            ) show_salary from emp;
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29668759/article/details/79965300

oracle 数据库一些单行函数的简单用法

oracle里日期格式一般都是采用dd-Mon-yyyy,即10-八月 -2004这种格式的,而我们一般提取的格式都是2004-8-11此种格式的,在sql语句中采取  to_date(" & dat...
  • zjghd
  • zjghd
  • 2006-10-30 11:35:00
  • 701

Oracle数据库 —— SQL之select语句(3) 单行函数

5 select语句5.4 单行函数
  • Robot__Man
  • Robot__Man
  • 2016-11-06 16:24:29
  • 495

Oracle数据库(三)单行函数

SQL> host cls SQL> --字符函数 SQL> select lower('Hello World') 小写,upper('Hello World') 大写,initcap('hell...
  • qq_34416191
  • qq_34416191
  • 2016-10-11 14:31:40
  • 121

Oracle数据库基础入门培训课程视频

风哥Oracle数据库基础入门培训视频课程,讲解了Oracle一些基础概念和简单的维护知识,是ORACLE入门学习的必备课程!
  • 2017年01月11日 15:28

oracle学习笔记

  • 2015年05月12日 11:30
  • 1KB
  • 下载

SQL语法-单行函数

单行函数严格来讲并不属于SQL语法,但是针对不同的数据库,首先SQL这个标准一定会共同遵守的,但是每个数据库都有每一个数据库自己定义的函数,利用函数,可以完成一些指定的操作功能。那么在Oracle之中...
  • ShunXiangL
  • ShunXiangL
  • 2016-07-26 22:07:13
  • 1132

Oracle数据库培训-SQL基础篇

  • 2012年03月15日 09:18
  • 1.82MB
  • 下载

MySQL单行函数

概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 好处;隐藏了实现细节,提高代码的重用性 调用:select 函数名 from 表 特点:    ①叫什么   ②干什...
  • z15732621582
  • z15732621582
  • 2017-11-26 16:39:42
  • 246

ORACLE单行函数与多行函数之一

单行函数与多行函数 最直观的解释是:单行函数输入一行,输出一行。多行函数输入多行,输出一行。如下图: 单行函数分为五种类型:字符函数、数值函数、日期函数、转换函数、通用函数 多行函数: 从...
  • q947817003
  • q947817003
  • 2013-11-02 14:01:57
  • 1490

Oracle单行函数和多行函数实例

单行函数和多行函数示意图:   单行函数分为五种类型:字符函数、数值函数、日期函数、转换函数、通用函数 单行函数: --大小写控制函数 select lower('Hello Wor...
  • furongkang
  • furongkang
  • 2011-10-11 20:41:24
  • 2991
收藏助手
不良信息举报
您举报文章:三、sql基础:单行函数--【Oracle数据库】
举报原因:
原因补充:

(最多只允许输入30个字)