函数

来源:互联网 发布:sql查询多表相同列名 编辑:程序博客网 时间:2024/06/05 14:29
--知识点一个
--函数
--字符函数:
--      LOWER:    转换成小写
--      UPPER:    转换成大写
--      INITCAP:  首字母变成大写,其余都小写
--      CONCAT:   字符串的连接
--      SUBSTR(str,start,end):字符串的截取(从第start位开始截取end位)
--      LENGTH:   求字符串的长度
--      NVL:      空值置换


--例一
select lower(ename) from emp;
--例二
select upper(ename) from emp;
--例三
select initcap(ename),initcap('ilovehong') from emp;
--例四
select concat(ename,deptno) from emp;
--例五
select substr(ename,1,3) from emp;
--例六
select length(ename) from emp;
--综合(比较一下两句)
select * from emp t where t.ENAME = 'smith';
select * from emp t where lower(t.ename) = 'smith';

--数值函数
--round:  四舍五入
--trunc:  截取,不进行四舍五入
--mod:    取余

--例一:round(参数一,参数二);参数一可为数值或列名,参数二为整数,不写默认为0,(若为1/2,表示精确到小数点后1/2位;若为0,表示精确到个位;若为-1,表示精确到十位)
select round(G_PRICE) from goods;
--例二:trunc(参数一,参数二):参数一同上,参数二为整数,不写默认为0,(若为2,表示截取到小数点后2位;若为0,表示取到个位;若为-1,表示截取到十位,此时个位为0)
select trunc(g_price) from goods;
--例三:扩展:dual里面只有一列数据,是一张虚表;
select mod(1600,300) from dual;
select * from dual;

--日期函数
--months_between(date1,date2):  两个日期之间的月数(date1-date2)
--add_months(date,n):           在指定日期上增加n月,n可为负数,表示减去n个月
--next_day(date,'friday'):      指定日期的下一天(如:下个星期五)是哪一天
--last_day(date):               指定日期的最后一天
--round(date,'year'):           对指定日期进行四舍五入,逢16日向月份进1,逢7月往年份进1;year表示精确的位置,可为month或day
--trunc(date,'year'):            对指定日期进行截取
--当语句中因为日期报错时(not valid month),执行下面语句
alter session set nls_date_language='american';


--例:1、返回系统的当前时间;2、返回系统的精确时间(带时分秒)
select sysdate from dual;
select systimestamp from dual;
--例一
select months_between('10-4月-94','20-5月-95') from dual;
--例二
select ADD_MONTHS('10-JAN-94',6) from dual;
--例三
select NEXT_DAY('15-OCT-2009','TUESDAY') from dual;
--例四
select LAST_DAY(SYSDATE) from dual;
select LAST_DAY(SYSDATE) - SYSDATE from dual;
--例五
select round(to_date('10-Jan-16'),'month') from dual;
select round(to_date('10-JUL-16'),'year') from dual;
select round(to_date('10-may-16'),'year') from dual;
--例六:第三种是把时间后面的时分秒截取掉(在日期问题或时间范围问题上使用的比较多)
select trunc(to_date('10-JAN-16'),'month') from dual;
select trunc(to_date('20-OCT-16'),'year') from dual;
select to_char(trunc(to_date('15-JUN-16')),'DD-mon-yy hh24:mi:ss') from dual;


--将日期(数值)转换成字符串
--to_char函数
--to_char(date,'fmt')
--1、使用format定制日期的格式
--2、使用fm来去除空格或者0
--3、使用逗号分隔
--日期格式模型的元素
--year:       英文年份(例如:two thousand seven(2007年))
--month:      英文月份(例如:march(三月))
--mon:        英文月份的缩写(例如:mar)
--day:        星期几的英文单词(例如:monday(星期一))
--DY:          星期几的前三个字母(例如:mon)
--ddsp:       英文拼写的天(如:five(5号))
--ddspth:     英文拼写的第几天(如:fifth(第五天))
--d:          一个星期的数字表示,星期六为7,星期天为1
--dd:        一个月的第几天
--ddd:       一年的第几天
--yyyy:      四位数的年
--mm:        二位数的月
--hh24:      24小时制      mi:分钟  ss:秒
--AM:         上午          PM:下午


--例一
select to_char('01-jan-09') from dual;
select to_char(to_date('01-jan-09')) from dual;
select to_char(sysdate,'yyyy-mon-dd hh24:mi:ss') from dual;
select to_char(sysdate,'YYYY-MON-DD-d-dd-ddd-day') from dual;