• Oracle学习笔记<3>


    单值函数

    1.函数的分类
    Oracle数据库中函数分为两类:
    1)单值函数
    n条数据经过函数处理得到n条结果
    例如:查询所有员工last_name,并以全部大写形式输出
    2)多值函数(组函数)
    n条数据经过函数处理可能得到小于n条结果
    例如:查询某班级每个小组的平均成绩。
    假设某班级48名同学,8人一组分为6组。
    计算小组平均成绩则需把每个小组的成绩相加除以小组人数。
    最终,48条数据参与运算,结果只有6条。
    多值函数计算时要使用group by根据某个字段值进行分组,
    所以多值函数也称组函数。

    2.哑表--dual
    dual是Oracle数据库中的一张哑表(虚表、伪表)
    哑表并非用来存储数据,所以本质上来讲不是一张真正意义的表。
    哑表存在的意义仅仅是为了满足select基本语法结构。
    我们在使用select语句计算或处理某些并不来源于某张表的数据时,
    就可以使用哑表。
    例如:使用select计算1+1:
    select 1+1 from dual;
    如上所述,1+1并不来源于某张特定的表,但是select又不能缺失from子句。
    所以这时候可以使用哑表来补全查询语句结构。
    特点:哑表中始终只有一条数据。

    3.单值函数在字符串的应用
    ·LOWER函数 将字符串转换成全部小写形式
    语法:lower(要转换的字符串)
    查询所有员工的last_name,要求全部小写输出
    select lower(last_name) from s_emp;
    ·UPPER函数 将字符串转换成全部大写形式
    语法:upper(要转换的字符串)
    查询所有员工的last_name,要求全部大写输出
    select upper(last_name) from s_emp;
    ·INITCAP函数 转换成每个单词首字母大写,其余字母小写的形式

    语法:initcap(要转换的字符串)

    查询所有员工的last_name,要求首字母大写,其余字母小写。

    select initcap(last_name) from s_emp;

    ·CONCAT函数 拼接字符串
    该函数效果类似||
    语法:concat(串1,串2)
    注意:Oracle中的concat函数只能有两个参数,
    如果需要拼接多个字符串,则需要嵌套使用。
    例如:
    将'I'、'LOVE'、'CHINA'拼接成一个字符串
    concat(concat('I','LOVE'),'CHINA')
    或者concat('I',concat('LOVE','CHINA'))
    如果使用||的话可以直接'I'||'LOVE'||'CHINA'
    *Mysql数据库中可以concat('I','LOVE','CHINA')
    ·SUBSTR 函数 求子串
    String.substring(int beginIndex,int endIndex);
    语法:substr(字符串,开始位置,长度)
    字符索引值从1开始
    例如:
    'Hello world!'
    substr('Hello World',3,5);

    ·LENGTH 函数 求字符串的长度
    语法:length(字符串)
    查询所有员工的last_name的长度?
    select length(last_name) from s_emp;
    ·NVL函数 处理空值
    语法:nvl(要处理的字段,默认值)
    如果查到的字段值不为空,则取该字段值
    如果为空,则取默认值

    4.单值函数在数字的应用
    ·round函数 四舍五入
    执行下列SQL命令,并观察规律:
    select round(45.67,0) from dual; //46
    select round(45.67,1) from dual; //45.7
    select round(45.67,2) from dual; //45.67
    select round(45.67,-1) from dual; //50
    select round(45.67,-2) from dual; //0
    select round(55.67,-2) from dual; //100
    如果只写一个参数,代表默认保留到个位,即round(45.67,0)
    第二个参数代表保留到个位旁边的第几位。
    负数向左数,正数向右数。
    ·trunc函数 只舍不取
    执行下列SQL命令,并观察规律:
    select trunc(45.67,0) from dual; //45
    select trunc(45.67,1) from dual; //45.6
    select trunc(45.67,2) from dual; //45.67
    select trunc(45.67,-1) from dual; //40
    select trunc(45.67,-2) from dual; //0
    select trunc(55.67,-2) from dual; //0
    ·mod函数 取余
    计算1600/300的余数?
    语法:mod(被除数,除数)
    select mod(1600,300)
    from dual;
    结果:100

    5.单值函数在日期上的应用
    ·MONTHS_BETWEEN 函数 计算两个日期间隔了的月数
    查询2008年8月8号,距现在多少个月?
    语法:months_between(日期1,日期2)
    select months_between(sysdate,'09-8月-2008')
    from dual;
    ·ADD_MONTHS函数 一个日期加上几个月之后的日期
    语法:add_months(日期,月数)
    查询现在的日期加上三个月?
    select add_months(sysdate,3)
    from dual;
    ·NEXT_DAY函数 查询某个日期之后的下一个星期几是几号?
    语法:next_day(日期,星期几)
    “星期几”有两种表达方式:
    1)星期的名字
    查询当前时间的下一个星期一是几号?
    select next_day(sysdate,'星期一')
    from dual;
    select next_day(sysdate,'monday')
    from dual;
    注意:不同语言环境下星期的名字写法。
    2)星期的序号
    注意:一个星期的第一天是周日。
    所以,查询当前时间的下一个周一日期:
    select next_day(sysdate,2)
    from dual;
    ·LAST_DAY函数 查询某个日期所在月的最后一天
    语法:last_day(日期)
    查询当前月的最后一天?
    select last_day(sysdate)
    from dual;
    ·ROUND函数 四舍五入
    语法:round(日期,取舍规则)
    取舍规则:保留哪一位

    1)保留到年
    原则:根据月份进行判断,6舍7入
    语法:round(日期,'year')
    舍:舍到今年的1月1号 00:00:00
    入:入到明年的1月1号 00:00:00
    查询当前日期根据年四舍五入的结果?
    select round(sysdate,'year')
    from dual;
    2)保留到月
    原则:根据日进行判断,15舍16入
    舍:舍到当前月的1号 00:00:00
    入:入到下个月的1号 00:00:00
    select round(sysdate,'month')
    from dual;
    3)保留到日(星期)
    原则:根据当前星期数进行计算
    取舍到上一个或者下一个星期日
    select round(sysdate,'day') from dual;
    周日 - 周二 舍 日 一 二
    周三 - 周六 入 三 四 五 六
    4)默认
    select round(sysdate) from dual;
    根据当前时间(小时数)进行取舍
    在12:00之前的,舍到今天的00:00:00
    过了12:00的,入到明天的00:00:00

    ·TRUNC函数 只舍不取
    与ROUND函数使用方法类似,只不过只舍不取。


    6.转换函数的应用
    1)to_char函数
    a)数字类型转换成字符串
    语法:to_char(数字,'fmt')
    fmt:格式
    select to_char(salary,'$9,999.00')
    from s_emp;
    0:代表强制补位
    9:不会进行部位
    ,:分割
    .:小数位
    L:当地的货币符号
    $:西方人的货币符号

    b)日期类型转换成字符串
    语法:to_char(日期,'fmt')
    YYYY 四位数的完整年份
    select to_char(sysdate,'YYYY')
    from dual;
    MM 两位数的月份数 阿拉伯数字
    查询当前时间?以年和月的形式显示?
    select to_char(sysdate,'YYYY-MM')
    from dual;
    D 一个星期中的第几天
    查询当前日期是一周中的第几天?
    select to_char(sysdate,'D')
    from dual;
    DD 一个月中的第几天
    查询当前日期,以年/月/日的形式显示?
    select to_char(sysdate,'YYYY/MM/DD')
    from dual;

    HH 小时
    默认为12小时制
    HH24
    代表24小时制的小时数
    MI 分钟
    SS 秒钟

    查询当前日期,以‘年-月-日 时:分:秒’
    select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
    from dual;
    AM/PM
    select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS PM')
    from dual;

    DDD 一年中的第几天
    查询当前日期是今年的第几天?
    select to_char(sysdate,'DDD')
    from dual;
    YEAR 年份的数字全称
    select to_char(sysdate,'YEAR')
    from dual;
    MONTH 月份的完整名字
    MON 月份的简称 JAN FEB APR MAR MAY
    ddsp sp:spelled 一个月中的第几天用英文拼写
    select to_char(sysdate,'ddsp')
    from dual;

    ddspth 一个月中的第几天英文拼写(序数词)
    select to_char(sysdate,'ddspth')
    from dual;
    DAY 星期的全称
    DY 星期的简称
    2)to_number
    把字符串转换为数字类型
    to_number(字符串)
    字符串中的内容必须是数字
    select to_number('1111') from dual;
    3)to_date
    把字符串转换成日期格式。
    '01-FEB-18'
    语法:to_date('2018-03-01','yyyy-dd-mm')
    '2018-02-03'

  • 相关阅读:
    通信的真正端点不是主机而是主机中的进程
    futures
    What's the customers care is only Myinput and Uroutput on the Cloud.What's more,MySecurity.
    r
    迭代器遍历列表 构造方法 constructor ArrayList Vector LinkedList Array List 时间复杂度
    2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala
    So the type system doesn’t feel so static.

    Unit redis-server.service is masked.
    Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令 PHONY伪目标实践
  • 原文地址:https://www.cnblogs.com/weixinyu98/p/9951447.html
Copyright © 2020-2023  润新知