sql 单行函数基础

--数字函数--
取小数有效位数
round 和 trunc (列|值|表达式, 小数的有效位数)
select round(3.1415926,3)from dual; =>3.142 四舍五入截取
select trunc(3.1415926,3)from dual; =>3.141 直接截取 3改成0代表取整数,-1代表去十位数
去余数
select mod(5,2)··from dual; 5除2的余数
绝对值
select abs (-5)··from dual; -5的绝对值

--字符函数--
常看字符长度
length(列|值|表达式);字符串用引号
转化大小写
upper(列|值|表达式);全部转大写字母
lower(列|值|表达式);全部转小写字母
initcap(列|值|表达式);每个单词首字母大写
补充字符
lpad(列|值,宽度,填充字符);从左边补不足宽度个填充字符
rpad(列|值,宽度,填充字符);从右边补不足宽度个填充字符
select rpad('abc',10,'de')from dual;
------------------
abcdededed
select lpad('abc',10,'de')from dual;
----------------
dedededabc
转换指定字符
translate(参数一,参数二,参数三);
参数一:要处理的内容,列|值
参数二:要检索的内容
参数三:检索后,与检索内容一一对应替换的内容(如果无替换值,则全部去掉)

置换指定字符
replace(列|值,被置换的字符,置换的字符);
select replace('helloworld','owo','***')from dual ; ==》 hell***rld
搜索字符串获取下标
instr(‘被搜索的字符串’,‘希望搜索的字符串’,搜索的开始位置,默认为1,第几次出现的位置,默认为1)
参数1 参数2 参数3 参数4
instr('go,go,come on!','go',-1,2) 从右边开始,第一位开始数(-1),go第二次出现的位置(2),结果是1
通过下标位置获取字符
substr(列|值,指定位置下标,保留几位)
select substr (' hello world! ' , 3) from dual; 表示: llo world!
select substr (' hello world! ' , 3,4 )from daul; 表示:llo

三目运算符 当谁是什么时,输出什么
decode() 比较第一和第二个参数,如果相等取第三个参数,如果不相等取第四个参数。
select decode('A','A','B','C')from dual; => B
decode(A,b,c,d,e,f,g,h)
如果A=b,输出c;
如果A=d,输出e;
如果A=f,输出g;
如果b,d,f都不满足A,输出h.
--输出区域表(s_region)中,每个地区对应的中
select id,name,decode(NAME,'North America','北美','South America','南美','Africa / Middle East','中东','Asia','亚洲','Europe','欧洲','其他州')from s_region;
上下两种函数功能类似
当什么什么是什么
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 表示星期几
months_between(date1,date2) 2个日期之间的月数
--查询2014年11月1日和2016年12月9日之间的间隔月数 、、// 数字型转日期类型 to_date('2014-11-1','yyyy-mm-dd')
select
abs(trunc(months_between(to_date('2014-11-1','yyyy-mm-dd'),to_date('2016-12-9','yyyy-mm-dd')),0))
from dual;
add_months(date1,n) 在date1的基础上加n个月 负数减去
--半年后的日期是什么?
select add_months(sysdate,6) from dual;
--半年前的日期是什么?
select add_months(sysdate,-6) from dual;

next_day(date1,'星期几') 在date1的基础上,下星期几是什么时候
--显示下个星期五是什么日期
select next_day(next_day(sysdate,'星期五'),'星期五') from dual;
last_day(date1) date1日期所在月的最后一天是什么时候
select last_day(add_months(sysdate,-6)) from dual;

posted @ 2017-11-02 21:29  沃泽法克  阅读(180)  评论(0)    收藏  举报