to_char上的fm意思
The format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below.to_char(sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003' to_char(sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003' to_char(sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003' The zeros have been suppressed so that the day component shows as "9" as opposed to "09".[@more@]/* FM :除空格 9999999.0099:允许小数点左
一个使用动态语句建分区表小procdurce
set serveroutput ondeclaredate_v date;date2_v varchar2(50);num_v INTEGER;name varchar2(50);sql_v varchar2(200);BEGIN date_v := to_date('2008-12-01','YYYY-MM-DD'); FOR num_v in 1 .. 88 LOOP date_v := date_v + 1; date2_v := to_char(date_v,'yyyy-mm-dd'); dbms_output.put_line(date_v||' '||date2_v); name := 'ppd_hurry_profile_hist_'||TO_CHAR(date_v,'yymmdd'); dbms_output.put_line(name); sql_v := 'alter table ppd_hurry_profile_hist add partit
Oracle函数translate()的用法
一、语法: TRANSLATE(string,from_str,to_str) 二、目的 返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE是REPLACE所提供的功能的一个超集。如果from_str比to_str长,那么在from_str中而不在to_str中的额外字符将从string中被删除,因为它们没有相应的替换字符。to_str不能为空。Oracle将空字符串解释为NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL。 三、允许使用的位置 过程性语句和SQL语句。 [@more@]SELECT TRANSLATE('abcdefghij','abcdef',
分析函数——first_value()与last_value()
itpub上nyfor的一些解释,很经典。问题的提出:在使用first_value()或last_value()的时候,同时使用partition和order by会得不到想要的效果。[@more@]SQL> select deptno,empno,ename,sal,2 last_value(sal) over( partition by deptno )3 from emp;DEPTNO EMPNO ENAME SAL LAST_VALUE(SAL)OVER(PARTITIONB------ ----- ---------- --------- ------------------------------10 7782 CLARK 2450.00 130010 7839 KING 5000.00 130010 7934 MILLER 1300.00 130020 7369 SMITH 800.00 297520 7876 ADAMS 1100.00 297520 7902 FORD 3000.00
AskTom 关于first_value() last_value()的解释
Hi Tom, a Short question In this query, I expect column "a" and "b" to have the same value select table_name, column_id, column_name, first_Value(column_name) over (partition by table_name order by column_id) a, last_value(column_name) over (partition by table_name order by column_id desc) b from all_tab_columns where table_name='ALL_ALL_TABLES'; TABLE_NAME COLUMN_ID COLUMN_NAME A B ALL_ALL_TABLES 1 OWNER OWNER OWNER ALL_ALL_TABLES 2 TABLE_NAME OWNER TABLE_NAME ... ALL_ALL_TA
Minus Intersect用法
Minus第一个查询结果中与第二个查询结果不相同的记录 Intersect返回第一个查询结果中与第二个查询结果中相同的记录[@more@]SELECT c FROM ATESTWHERE a = 3INTERSECTSELECT c FROM ATESTWHERE a = 7;SELECT c FROM ATESTWHERE a = 3MINUSSELECT c FROM ATESTWHERE a = 7;
Oracle索引扫描的优势以及指定如何全索引扫描
全索引扫描有时也被称为快速全索引扫描,有些SQL查询可以以只通过读取索引而不读取表中的数据即可完成,例如下面的查询就不需要访问表中的数据,而仅仅是索引本身就可以完全满足这个查询。select distinct color count(.)from automobilesgroup by color;[@more@] 不读取表记录确实存在着巨大的优越性,但是在下列情况下仍然要求Oracle调用快速全索引扫描。 ·所有要求查询的字段必须在索引中指定。也就是说,在select和where子句中的所有字段必须在索引中存在。 .查询返回大于索引中所有记录的10%. 10%这个数
keep用法举例
keep可以提取dense_rank,rank等分析函数返回的first,last值,下面是用法举例[@more@]SQL> select rowid rid, dt from tmp;RID DT------------------ -----------AAAIVGAABAAAM/CAA5 2008-1-1AAAIVGAABAAAM/CAA6 2008-1-4AAAIVGAABAAAM/CAA7 2008-1-6AAAIVGAABAAAM/CAA8 2008-1-8AAAIVGAABAAAM/CAA9 2008-1-10AAAIVGAABAAAM/CAA+ 2008-1-116 rows selectedSQL> SQL> select min(rowid) keep(dense_rank first order by abs(dt - to_date('20080105', 'YYYYMMDD')), dt) rid, 2 min(dt) keep(dense_rank
[转]oracle 分析函数 之 rollup,cube
使用rollup函数的介绍下面是直接使用普通sql语句求出各地区的汇总数据的例子06:41:36 SQL> set autot on06:43:36 SQL> select area_code,sum(local_fare) local_fare06:43:50 2 from t06:43:51 3 group by area_code06:43:57 4 union all06:44:00 5 select '合计' area_code,sum(local_fare) local_fare06:44:06 6 from t06:44:08 7 /[@more@]AREA_CODE LOCAL_FARE---------- --------------5761 54225413.045762 52039619.605763 69186545.025764 53156768.465765 104548719.19合计 333157065.316 rows selected.Elapsed: 00:00:00
[转]Oracle 排序中常用的NULL值处理方法
1、缺省处理 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前[@more@]2、使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如nvl(employee_name,’张三’)表示当employee_name为空时则返回’张三’,如果不为空则返回employee_name通过这个函数可以定制null的排序位置。3、使用decode函数 decode函数比nvl函数更强大,同样它也可以将输入参数为空时转换为一特定值,如decode(employee_name,null,’张三’, employee_name)表示当employee_name为空时则返回’张三’,如果不为空则返回e
练手之一
最近一直做数据仓库毕业论文实验,不时需要写点小程序来生成数据。现在记录下来,以当回忆。 下面procdurce运行环境: NLS_DATE_LANGUAGE = AMERICAN NLS_DATE_FORMAT = yyyy-mm-dd 如果不是,修要临时环境 ALTER session SET NLS_DATE_LANGUAGE = 'AMERICAN' ALTER session SET NLS_DATE_FORMAT = 'yyyy-mm-dd'[@more@]SET SERVEROUTPUT ONDECLAREv_msisdn INTEGER;v_customer INTEGER(20);v_minute INTEGER;v_date VARCHAR2(10);v_call_type VARCHAR2(10);v_sql VARCHAR2(200);v_year VARCHAR2(10);v_month VA
SQL语句优化技术分析
操作符优化IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:[@more@]操作符优化IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个
sqlplus的一些命令设置
下面这些设置主要是用来spool数据时使用的[@more@]WHENEVER SQLERROR EXIT -1 ROLLBACK; --发现错误就退出set head off --在每页的上面不显示列标题,而是以空白行代替set verify off --可以关闭提示确认信息set trimspool on --去除重定向(spool)输出每行的拖尾空格,缺省为offset newpage 0 --页与页的分隔为0set pagesize 0 --不分页set lines 10000 --每
动态执行用法例子
这个proc的作用就是从lottery select出数据,然后分别insert到superlottery、superlottery2里.其中insert 字符时候需要使用'',一对双引号来转化为单引号.DECLAREID_v VARCHAR2(20);NO1_v VARCHAR2(20);NO2_v VARCHAR2(20);NO3_v VARCHAR2(20);NO4_v VARCHAR2(20);NO5_v VARCHAR2(20);NO6_v VARCHAR2(20);NO7_v VARCHAR2(20);sql_v VARCHAR2(200);sql2_v VARCHAR2(200);CURSOR lottery_cur ISSELECT ID,NO1,NO2,NO3,NO4,NO5,NO6,NO7FROM LOTTERY;lottery_rec lottery_cur%ROWTYPE;BEGINOPEN lottery_cur;LOOPFETCH lottery_cur INTO lo