zoukankan      html  css  js  c++  java
  • 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'

  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/weixinyu98/p/9951447.html
Copyright © 2011-2022 走看看