select ADD_MONTHS(to_date(‘2011-01-01’,’yyyy-mm-dd’),-3) from dual 24.
LAST_DAY(d)
返回特定日期所在月份的最后一天,参数d用于指定日期值。
SQL> select to_char(sysdate,’yyyy.mm.dd’),to_char((sysdate)+1,’yyyy.mm.dd’) from dual;
SQL> select last_day(sysdate) from dual;
SELECT LAST_DAY(to_date(‘2011-10-10’,’yyyy-mm-dd’)) FROM dual; 25.
MONTHS_BETWEEN(d1,d2)
返回日期d1和d2之间相差的月数,如果d1小于d2,则返回负数。如果日期d1和d2的天数相同或都是月底,则返回整数;否则Oracle以每月31天为准,计算结果的小数部分。
SQL> select months_between(‘19-12月-1999’,’19-3月-1999’) mon_between from dual; SQL>selectmonths_between(to_date(‘2000.05.20’,’yyyy.mm.dd’),to_date(‘2005.05.20’,’yyyy.mm.dd’)) mon_betw from dual;
select
MONTHS_BETWEEN(to_date(‘2011-01-01’,’yyyy-mm-dd’),to_date(‘2011-03-01’,’yyyy-mm-dd’)) from dual
select
MONTHS_BETWEEN(to_date(‘2011-01-01’,’yyyy-mm-dd’),to_date(‘2011-03-02’,’yyyy-mm-dd’)) from dual
26.
NEXT_DAY(date,char) (下一个周几是几号)
返回特定日期之后的第一个工作日所对应的日期。参数date用于指定日期时间值,参数char用于指定工作日。工作日必须与日期语言匹配。
SQL> select next_day(‘18-5月-2001’,’星期五’) next_day from dual; select next_day(sysdate,’星期五’) from dual; 27.
SYSDATE
用来得到当前系统日期
SQL> select to_char(sysdate,’dd-mm-yyyy day’) from dual; 28.
TO_CHAR(date[,’format’ [,’nlsparams’ ]])
将数字或日期值转变为VARCHAR2类型的数据。Date为指定日期值;format用于指定日期格式,如果省略,则使用默认日期显示格式;nlsparams’用于指定日期显示语言,指定方式
31
为’NLS_DATE_LANGUAGE=language’,如果省略,则使用会话默认的日期语言。
SELECT TO_CHAR(123456789,’L999G999G999D99’,’NLS_CURRENCY=¥’) \ D 如99D99: 返回小數点的位置,两边的9指定了最大位數。 G 如99G99: 返回千分位分隔符,G可出現多次 L 如L999: 在指定位置上返回本地货币号
select to_char(123) from dual
select to_char(sysdate,’yyyy’) from dual select to_char(sysdate,’mm’) from dual select to_char(sysdate,’dd’) from dual select to_char(sysdate,’yyyy-mm-dd’) from dual 29.
TO_DATE(string,’format’)
将字符串转化为ORACLE中的一个日期 30.
TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符 可能是全角输入法的问题 SQL> select to_multi_byte(‘高’) from dual; select to_multi_byte(‘AA’) from dual; 31.
50.TO_NUMBER
将给出的字符转换为数字
SQL> select to_number(‘1999’),to_number(‘ 1999’) year from dual;32.
GREATEST
返回一组表达式中的最大值,即比较字符的编码大小. SQL> select greatest(‘AA’,’AB’,’AC’) from dual;
SQL> select greatest(‘啊’,’安’,’天’) from dual; 按汉字排序? select greatest(12,13,11) from dual; 33.
LEAST
返回一组表达式中的最小值
SQL> select least(‘啊’,’安’,’天’) from dual; 34.
USER
返回当前用户的名字
SQL> select user from dual;
32
35.
MAX(DISTINCT|ALL)
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次 SQL> select max(distinct sal) from scott.emp; 36.
MIN(DISTINCT|ALL)
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次 SQL> select min(all sal) from gao.table3; 37.
GROUP BY
主要用来对一组数进行统计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno; 38.
HAVING
对分组统计再加限制条件
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5; SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ; 39.
ORDER BY
用于对查询到的结果进行排序输出
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc; select write_sect_no,count(1) from cim_customer group by write_sect_no having count(1)<10 order by write_sect_no 40.
DECODE
条件判断赋值,很有用处,相当于IF判断。可以简化查询、数据转换、提高性能等功效 DECODE(expr,adjust1,value1,??,default value)
SELECT deptno,ename,sal,decode(deptno,10,sal*1.2,20,sal*1.1,sal) “New Salary” FROM emp ORDER BY deptno;
41.
NVL(expr1,expr2)
该函数用于将NULL转变为实际值。如果expr1是NULL,则返回expr2;如果expr1不是NULL,则返回expr1。参数expr1和expr2可以是任何类型,但二者数据类型必须要匹配。 Select Nvl(write_sect_no,’无抄表区段’) from user_files
33
42. SUM(exprseeion_to_be_added_together)
将传递给它作为参数的表达式中的所有值累加在一起,表达式既可以是列的名字,也可以是一个计算的结果。它仅统计实际的值,NULL值将被忽略。
Select Sum(Total_power) from df_money_files where total_money >0 43.
to_char(n[,fmt]) 数字转换成字符
其实:to_number,to_char,to_date等转换函数都可以在很多数据类型之间进行转换,to_lob一般只能将long、long raw转换为clob、blob、nclob类型
数字格式:
34
44. round/trunc(d [,fmt])
Round(d[,fmt]):返回日期时间的四舍五入结果。参数d用于指定日期时间值,参数fmt用于指定四舍五入的方式。如果设置fmt为YEAR,则7月1日为分界线;如果设置fmt为MONTH,则16日为分界线;如果设置fmt为DAY,则中午12:00时为分界线。
Trunc(d[,fmt]):用于截断日期时间数据。Fmt用于指定截断日期时间数据的方法。如果设置fmt为YEAR,则结果为本年度的1月1日;如果设置fmt为MONTH,则结果为本月1日。
SQL> select round(sysdate,’YEAR’) from dual; ROUND和TRUNC:按照指定的精度进行舍入 select
round(55.5),round(55.5,2),round(55.543,2),round(-55.4),trunc(55.5),trunc(55.5,1),trunc(-55.5) from dual;
8 操纵数据
使用DML语句(INSERT,UPDATE,DELETE)可以操纵表和视图的数据。
8.1 插入数据
当给表增加数据时,可以使用INSERT语句。使用INSERT语句既可以为表插入单行数据,也可以通过子查询将一张表的多行数据插入到另一张表。从Oracle Database 9i开始,Oracle还提供了多表插入功能,即使用一条INSERT语句同时为多张表插入数据。但使用INSERT语句有以下一些注意事项: ? 如果为数字列插入数据,则可以直接提供数字值;如果为字符列或日期列插入数据,则必须用单引
号引住
? 当插入数据时,数据必须要满足约束规则,并且必须为主键列和NOT NULL列提供数据 ? 当插入数据时,数据必须要与列的个数和顺序保持一致
1. 使用VALUES子句插入数据
INSERT INTO [(column[,column,?])] VALUES(value[,value,?]) ? 不使用表列插入数据
INSERT INTO dept VALUES(50,’TRAIN’,’BOSTON’)
? 使用表列插入单行数据
35