oracle 中sql语句的几个基本函数..

今天学习了 sql语句中几个基本的函数,

1、sysdate ----查询当前数据库系统时间 

select sysdate from dual;------ 其中dual是Oracle自带的一张虚拟表,没有任何意义,为了保证sql语句的完整性。

2. round(列|值|表达式,小数的有效位数) 表示四舍五入 

   trunc(列|值|表达式,小数的有效位数)  直接截取有效位数

如:

--将值2784.342933精确到小数点后3位,不四舍五入
select trunc(2784.342933,3) from dual;
--将值2784.642933精确到整数,2784
select trunc(2784.342933,0) from dual;
--将值2784.342933精确到整数十位,2780
select trunc(2784.342933,-1) from dual;
--将值2784.342933精确到整数百位,2800
select round(2784.342933,-2) from dual;

3.mod(列|值,列|值) 求余数 

如:

--求5/2的余数
select mod(5,2) from dual;

4.abs(列|值) 求绝对值

--求-2的绝对值
select abs(-2) from dual;

字符串函数:

1.length(列|值|表达式);求长度

--获取员工表中员工名字及其名字长度
select
first_name,length(first_name)
from
s_emp;

2.upper(列|值|表达式);全部转大写字母

lower(列|值|表达式);全部转小写字母
initcap(列|值|表达式);每个单词首字母大写

select upper('abc')from dual;==>ABC
select lower('ABC')from dual;==>abc
select initcap('hello world')from daul;==>Hello World

例子:查询ben的工资
select salary from s_emp where lower(first_name) = lower('ben');

3.lpad(列|值,宽度,填充字符);从左边补不足宽度个填充字符

rpad(列|值,宽度,填充字符);从右边补不足宽度个填充字符

select rpad('abc',10,'de')from dual;
------------------
abcdededed

select lpad('abc',10,'de')from dual;
----------------
dedededabc

4.ltrim(列|值,截取字符);从左边截取字符

rtrim(列|值,截取字符);从右边截取字符

select rtrim('abcdedede','de') from dual;
------------
abc
select rtrim('abcddedede','de') from dual;
--------------
abc --表示从右边开始截取de|d|e,直到不同于截取字符的字符为止

5.

replace(列|值,被置换的字符,置换的字符);置换指定字符

select replace('helloworld','owo','***')from dual;==》hell***rld

6.

translate(参数一,参数二,参数三);转换指定字符
参数一:要处理的内容,列|值
参数二:要检索的内容
参数三:检索后,与检索内容一一对应替换的内容(如果无替换值,则全部去掉)

select
translate('He1l20l4o W65o75rl4d765!',
'abcdefghijklmnopqrstuvwxyz0123456789',
'abcdefghijklmnopqrstuvwxyz')
from dual;

7.

instr(要查询的字符串,希望查询的字符串,从什么位置开始,第几次出现)查找指定字符串中所在的位置下标    参数三 正数表示从左往右,负数表示从右往左
select instr('go,go,come on!','go',1,2)from dual;

注意:数据库字符串下标从1开始计数。

8.

substr(列|值,指定位置下标,保留几位)
select substr('hello world!',3)from dual;表示:从指定下标处开始获取字符。

select substr('hello world!',3,4)from daul;表示:从3号坐标开始获取,保留四个长度

9.

decode()
a.类似一个三目运算符:(表达式?a:b)如果表达式为true,取a;如果表达式为false,取b
比较第一和第二个参数,如果相等取第三个参数,如果不相等取第四个参数。

decode(A,b,c,d,e,f,g,h,i,j)

如果A=b,输出c;
如果A=d,输出e;
如果A=f,输出g;
如果b,d,f都不满足A,输出h.

--输出显示每个订单编号及支付方式,支付方式要么是现金,要么是信用卡,否则就是未知数。
select id,decode(payment_type,'CASH','现金','CREDIT','信用卡','未知数' )
from s_ord;

10.

case when 可以把它看成switch功能;


select name 部门名,
case region_id
when 1 then '北美'
when 2 then '南美'
when 3 then '中东'
when 4 then '亚洲'
when 5 then '欧洲'
else '未知区域'
end "区域名"
from s_dept;

注意:case后面是否出现列名,取决于when后面条件是否出现比较列
如果when后面已经出现列名,那case后面务必不能写列名,
如果when后面是值,那么必须在case后面指定列名,否则无法确定所给的值的真正含义

日期函数 

oracle默认的日期格式为 dd-MON-yy
select sysdate from daul;

dd 表示2位数的日
mon/month 表示月份,如:6月
mm 表示2位数的月,如:06
yyyy 表示4位数的年份
HH24 表示24小时
HH 表示12小时
mi 表示分钟
ss 表示秒
fm 表示去掉前面的0,如:fm 06,值为6
day 表示星期几

1.

months_between(date1,date2) 2个日期之间的月数
--查询2014年11月1日和2016年12月9日之间的间隔月数
select trunc(abs(months_between(to_date('2014-11-1','yyyy-mm-dd'),to_date('2016-12-9','yyyy-mm-dd'))),0) from dual;

2.

add_months(date1,n) 在date1的基础上加n个月
--半年后的日期是什么?
select add_months(sysdate,6) from dual;

3.

next_day(date1,'星期几') 在date1的基础上,下星期几是什么时候
--下一个星期五是几号?
select next_day(next_day(sysdate,'星期五')) from dual;

 

posted @ 2017-11-02 20:57  落落无伤  阅读(584)  评论(0编辑  收藏  举报