Oracle笔记之单行函数(一)


Oracle笔记之单行函数(一)

字符函数

--首字母大写,小写,大写

select initcap(rowid)from otest

select lower(rowid)from otest

select upper(rowid)from otest

--合并列 concat(a,b)

select orderno || job || tid from otest

select concat(orderno,job)from otest

select concat('hello ','world')合并from dual

--字符串截取

--从第2位开始取,到结尾

select substr(orderno,2)from otestwhere orderno =888

--从第3位开始取,取5

select substr('hello world',3,5)from dual

--instr(a,b),返回字符所在位置,不存在返回0

select instr(orderno,2)位置from otest

--字符长度,字节长度

select length(orderno)字符长度from otest--3

select length(job)字符长度from otest  --2

select lengthb(orderno)字节长度from otest--3

select lengthb(job)字节长度from otest--6

select length('北京'),lengthb('北京')from dual--2 6

--lpad左填充rpad右填充(字符,位数,不足位补齐字符)

select lpad('abc',5,'*')left,rpad('abc',5,'+')right from dual

--trim去掉前后指定字符--注意trim关键词from

select trim('h' from 'hello olleh')from dual

--replace(操作物,替换谁,替换为) --替换字符函数

select replace('hello olleh','l','x')from dual

数字函数

--四舍五入  round(小数,保留位数)

select round(45.625,2)one,round(45.625,1)two,

round(45.625,0) three,round(45.625,-1),round(45.625,-2)from dual

--截断trunc(小数,保留截断位数)

select trunc(45.625,2)one,trunc(45.625,1)two,

trunc(45.625,0) three,trunc(45.625,-1),trunc(45.625,-2)from dual

 

--求余mod(除数,被除数)

select mod(1600,300)余数from dual

日期格式和函数

--当前日期sysdate

select sysdate from dual

--利用to_char的日期转换

  /*日期格式:

   格式       表示          例如

   YYYY      数字年         2017

   YEAR      英文年    twenty seventeen

   MM        二位月          05

   MONTH     全称月         4

   DD        二位日          02

   DY/DAY     星期         星期一

   HH12/24   小时制         12/24

   MI         分钟          0-59

   SS          秒           0-59

   */

select to_char(sysdate,'yyyy-mm-dd dy hh24:mi:ss')时间日期from dual

--日期不能加日期没有意义,但可以减日期。日期可以加减数字表示前后天数

select (sysdate+sysdate)time from dual--报错:Date cannot be dated

select (sysdate-sysdate)time from dual

select (sysdate-1)昨天,(sysdate+1)明天from dual

--日期差months_between(a,b)

select months_between(sysdate,(sysdate-31))相差from dual

--指定日期加月数add_months(a,b)

select add_months(sysdate,5)from dual

--指定日期的下个日期next_day

  /*next_day可应用于自动备份数据;异地容灾

    1.分布式数据库 同步、更新、备份

    2.快照 触发器的运用*/

select next_day(sysdate,'星期一')from dual

--本月最后一天last_day

select last_day(sysdate)from dual

--日期的四舍五入round(a,b)

--日期的截断trunc(a,b)和数字的用法相同,以日期一半划分

 

 

转换函数

--日期格式中有字符串要用双引号括起来

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss "今天是"day')from dual

--货币的表示,数字格式转换

  /*数字格式

    表示        含义

     9          数字

     0           

     $          美元

     L        本地货币

     .         小数点

             千位符

     */

--查询薪水 要求保留两位,千位符,货币代码表示

select to_char(orderno,'L9,999.99')from otest

--字符转数字to_number(字符,数字格式)

select to_number('123','999')from dual

--字符转日期to_date(字符,日期格式)

select to_date('2017-05-21','yyyy-mm-dd')from dual

--查看默认格式语句

select *from V$nls_Parameters

--默认日期格式为:DD-MON-RR

--修改默认日期格式

alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd'

 

 

通用函数

--nvl(a,b)anull返回b

--nvl(a,b,c)anull返回c,否则返回b

--nullif(a,b)a=b时,返回null,否则返回a

--coalesce(a,b,...,n)从左到右找到第一个不为null的值

 

 

条件表达式函数

--条件表达式

  /*SQL语句中使用IF-THEN-ELSE逻辑

   两种方法:

    CASE表达式:SQL99语法,类似于Basic,比较繁琐

    DECODE函数:Oracle自己的语法,类似Java,比较简洁

    */

--CASE语句

CASE exprWHEN comparison_expr1THEN return_expr1

          WHEN comparison_expr2THEN return_expr2

          WHEN comparison_exprnTHEN return_exprn

          ELSE else_expr

END

--DECODE函数

DECODE(expr,comparison_expr1,return_expr1,

            comparison_expr2,return_expr2,

            comparison_exprn,return_exprn,

            else_expr)



  全文根据数据库实际编写摘录,需读者掌握基本建表。感谢您的支持与收藏,谢谢!

你可能感兴趣的:(Oracle)