本站所有文章及代码如无特别说明均为本站原创,如果您需要转载,需本人同意!
我坚持一日三思,所以我的blog每天都会更新,除非我无法上网!(^_^)
我的联系方式:
QQ:363978818 Msn/mail:yonghe169@163.com
[不指定 2007/12/12 13:49 | by fubin ]

删除两个表重复的数据

[不指定 2008/05/10 09:44 | by fubin ]
delete
   from    schema.table1 t1
   where   t1.rowid >
   (select
    min   (t2.rowid)
    from   schema.table1 t2
    where  t1.fcn = t2.fcn);

阿拉伯文字输入方法

[不指定 2008/05/09 20:48 | by fubin ]
这是所有特殊文字输入方法的最好解决方案。

点击在新窗口中浏览此图片



在Oracle中实现Java Split方法,我有做了一个改进,既可以将某个字符串,分割以后,将任何段组合成为一个新的String.


CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);

CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
 RETURN ty_str_split
IS
 j INT := 0;
 i INT := 1;
 len INT := 0;
 len1 INT := 0;
 str VARCHAR2 (4000);
 str_split ty_str_split := ty_str_split ();
BEGIN
 len := LENGTH (p_str);
 len1 := LENGTH (p_delimiter);

 WHILE j < len
 LOOP
   j := INSTR (p_str, p_delimiter, i);

   IF j = 0
   THEN
       j := len;
       str := SUBSTR (p_str, i);
       str_split.EXTEND;
       str_split (str_split.COUNT) := str;

       IF i >= len
       THEN
         EXIT;
       END IF;
   ELSE
       str := SUBSTR (p_str, i, j - i);
       i := j + len1;
       str_split.EXTEND;
       str_split (str_split.COUNT) := str;
   END IF;
 END LOOP;

 RETURN str_split;
END fn_split;
/


--取得从开始到某个位置的所有字符串的累加

CREATE OR REPLACE FUNCTION fn_split_b (p_str IN VARCHAR2, p_delimiter IN VARCHAR2,my_flag in integer)
 RETURN string as
 cursor c(s_p_str VARCHAR2, s_p_delimiter VARCHAR2)
 IS
   SELECT * FROM TABLE (CAST (fn_split (s_p_str, s_p_delimiter) AS ty_str_split));
 r c%ROWTYPE;
 temp_Var varchar2(255) :='';
 temp_int integer :=1;
BEGIN
 OPEN c(p_str,p_delimiter);
 LOOP
   FETCH c INTO r;
   EXIT WHEN temp_int>my_flag;
   temp_int:=temp_int+1;
   temp_Var:=temp_Var||r.column_value;
 END LOOP;
   return temp_Var;
 CLOSE c;
END;

北极小村

[不指定 2008/05/05 10:01 | by fubin ]
点击在新窗口中浏览此图片
The tiny village of Moriusaq stands on the frozen landscape of northwest Greenland. The sea ice near this settlement used to be thick enough to travel and hunt on for hundreds of miles for up to ten months. Recently though, climate change has reduced this crucial window to just a few weeks each year.

这是一个位于格林兰西北部冻土地区的Moriusaq小村庄,以往这些地区的冰层在冻结以后通常可以供人们在上面行动10个月左右,但是由于最近气候变化造成了这种情况只能一年持续数周。

忙碌的一天

[不指定 2008/05/04 09:46 | by fubin ]
假日过去了。。。新的工作周期又开始啦,真是忙碌的一天!

Joboss中文问题解决方案

[不指定 2008/04/29 09:37 | by fubin ]
现象:在Web浏览器中,点击中文的Link,传过去的值是乱码。

解决方案:修改配置

文件地址:
M:\jboss-4.0.5.GA\server\all\deploy\jbossweb-tomcat55.sar \server.xml

修改内容:

 将 disableUploadTimeout="true"  URIEncoding="GBK" useBodyEncodingForURI="true" 文字配置加入其中。


例如:

    <!-- A HTTP/1.1 Connector on port 8080 -->
     <Connector port="8080" address="${jboss.bind.address}"
        maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
        emptySessionPath="true"
        enableLookups="false" redirectPort="8443" acceptCount="100"
        connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="GBK" useBodyEncodingForURI="true"/>

     <!-- Add this option to the connector to avoid problems with
         .NET clients that don't implement HTTP/1.1 correctly
        restrictedUserAgents="^.*MS Web Services Client Protocol 1.1.4322.*$"
     -->
 
     <!-- A AJP 1.3 Connector on port 8009 -->
     <Connector port="8009" address="${jboss.bind.address}"
        emptySessionPath="true" enableLookups="false" redirectPort="8443"
        protocol="AJP/1.3"/>

P2P标准服务器代码

[不指定 2008/04/27 17:30 | by fubin ]
下载文件
这个文件只能在登入之后下载。请先 注册登入
TO_DATE格式
  Day:   
  dd    number     12
  dy    abbreviated  fri     
  day   spelled out  friday            
  ddspth  spelled out,  ordinal  twelfth
  Month:  
  mm    number     03
  mon   abbreviated  mar
  month  spelled out  march 
  Year:             
  yy    two digits  98
  yyyy   four digits  1998  
  
  24小时格式下时间范围为: 0:00:00 - 23:59:59....
  12小时格式下时间范围为: 1:00:00 - 12:59:59 ....  
1.
  日期和字符转换函数用法(to_date,to_char)   
 
2.
  select to_char( to_date(222,'J'),'Jsp') from dual
  
  显示Two Hundred Twenty-Two
 
3.
  求某天是星期几
  select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 
  星期一
  select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 
  monday  
  设置日期语言
  ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
  也可以这样
  TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
 
4.
  两个日期间的天数
  select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
 
5.   时间为null的用法
  select id, active_date from table1
   UNION
  select 1, TO_DATE(null) from dual;
  
  注意要用TO_DATE(null)
 
6. 
  a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
  那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
  所以,当时间需要精确的时候,觉得to_char还是必要的
7.   日期格式冲突问题
     输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
  alter system set NLS_DATE_LANGUAGE = American
     alter session set NLS_DATE_LANGUAGE = American
  或者在to_date中写
  select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; 
  注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
  可查看
  select * from nls_session_parameters
  select * from V$NLS_PARAMETERS
 

 日期和字符转换函数用法(to_date,to_char)
     We overwrite NLS_DATE_FORMAT into different formats for the session. 
     SQL> alter session set nls_date_format = 'DD-MON-RR'; Session altered.
     SQL> set pagesize 0
   SQL> set linesize 130
   SQL> select * from nls_session_parameters;
   NLS_LANGUAGE          AMERICAN
   NLS_TERRITORY         AMERICA
   NLS_CURRENCY          $
   NLS_ISO_CURRENCY        AMERICA
   NLS_NUMERIC_CHARACTERS     .,
   NLS_CALENDAR          GREGORIAN
   NLS_DATE_FORMAT        DD-MON-RR
   NLS_DATE_LANGUAGE       AMERICAN
   NLS_SORT            BINARY
   NLS_TIME_FORMAT        HH.MI.SSXFF AM
   NLS_TIMESTAMP_FORMAT      DD-MON-RR HH.MI.SSXFF AM
   NLS_TIME_TZ_FORMAT       HH.MI.SSXFF AM TZH:TZM
   NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZH:TZM
   NLS_DUAL_CURRENCY       $
   NLS_COMP            BINARY

   15 rows selected.
     specify it in SQL statement:
     
    SQL> select to_date('03-SEP-1999','DD-MON-YYYY') from dual;
     03-SEP-99
    SQL> alter session set nls_date_format = 'MM-DD-YYYY';
       Session altered.
      
    SQL> select to_date('03-SEP-99','DD-MON-YY') from dual;
       TO_DATE('0
       ----------
       09-03-1999 
    SQL> alter session set nls_date_format = 'RRRR-MM-DD';
       Session altered. 
      
    SQL> select to_date('03-SEP-1999','DD-MON-YYYY') from dual;
       TO_DATE('0
       ----------
       1999-09-03 
      
  When we use TO_CHAR function, we get expected results of format from current SQL statement: 
    SQL> alter session set nls_date_format = 'MM-DD-YY';
       Session altered. 
    SQL> select to_char(sysdate,'dd-mm-yyyy') from dual;
       TO_CHAR(SYSDATE,'DD-MM-YYYY') 
       07-09-1999 
    SQL> alter session set nls_date_format = 'RR-MON-DD';
       Session altered. 
    SQL> select to_char(sysdate,'dd-mon-yy') from dual;
       TO_CHAR(SYSDATE,'DD-MON-YY') 
       07-sep-99 
    SQL> select to_char(sysdate,'dd-Mon-yy') from dual;
       TO_CHAR(SYSDATE,'DD-MON-YY') 
       07-Sep-99
8.
  select count(*) 
  from ( select rownum-1 rnum 
     from all_objects 
     where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
     02-01','yyyy-mm-dd')+1 
     ) 
  where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
  not 
  in ( '1', '7' )
  
  查找2002-02-28至2002-02-01间除星期一和七的天数
  在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).  
 
9.
  select months_between(to_date('01-31-1999','MM-DD-YYYY'), 
   to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 
  1
  
  select months_between(to_date('02-01-1999','MM-DD-YYYY'),  
   to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 
  
  1.03225806451613
10.   Next_day的用法
  Next_day(date, day)
  
  Monday-Sunday, for format code DAY   
  Mon-Sun, for format code DY     
  1-7, for format code D 
 
11   
  select to_char(sysdate,'hh:mi:ss') TIME from all_objects
  注意:第一条记录的TIME 与最后一行是一样的
  可以建立一个函数来处理这个问题
  create or replace function sys_date return date is 
  begin 
  return sysdate; 
  end; 
  
  select to_char(sys_date,'hh:mi:ss') from all_objects; 
12.
     获得小时数
     
     SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
     SQL>  select sysdate ,to_char(sysdate,'hh') from dual;
     
     SYSDATE       TO_CHAR(SYSDATE,'HH')
     -------------------- ---------------------
     2003-10-13 19:35:21 07
     
     SQL>  select sysdate ,to_char(sysdate,'hh24') from dual;
     
     SYSDATE       TO_CHAR(SYSDATE,'HH24')
     -------------------- -----------------------
     2003-10-13 19:35:21 19
     
     获取年月日与此类似
13.
  年月日的处理
  select older_date,
      newer_date,
      years,
      months,
      abs(
       trunc(
         newer_date-
           add_months( older_date,years*12+months )
          )
       ) days
   from ( select 
     trunc(months_between( newer_date, older_date )/12) YEARS,
    mod(trunc(months_between( newer_date, older_date )), 
       12 ) MONTHS,
          newer_date,
          older_date
        from ( select hiredate older_date,
         add_months(hiredate,rownum)+rownum newer_date
            from emp )
      )
 
14.
  处理月份天数不定的办法
  select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
 
16.
  找出今年的天数
  select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
  
  闰年的处理方法
  to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )
  如果是28就不是闰年
 
17.
  yyyy与rrrr的区别
  'YYYY99 TO_C
  ------- ----
  yyyy 99 0099
  rrrr 99 1999
  yyyy 01 0001
  rrrr 01 2001
 
18.不同时区的处理
  select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
  from dual; 
 
19.
  5秒钟一个间隔
  Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
  from dual
  
  2002-11-1 9:55:00 35786
  SSSSS表示5位秒数
 
20.
  一年的第几天
  select TO_CHAR(SYSDATE,'DDD'),sysdate from dual 
  310 2002-11-6 10:03:51
 
21.计算小时,分,秒,毫秒
  select
      Days,
      A,
      TRUNC(A*24)                   Hours,
      TRUNC(A*24*60 - 60*TRUNC(A*24))         Minutes,
      TRUNC(A*24*60*60 - 60*TRUNC(A*24*60))      Seconds,
      TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60))  mSeconds
  from
  (
  select
      trunc(sysdate)       Days,
      sysdate - trunc(sysdate)   A
  from dual
  )
 
  
9i以上版本
  -----------------------------
  SQL>select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1,
  to_char(current_timestamp) time2 from dual;
  
  TIME1             TIME2
  ----------------------------- ----------------------------------------------------------------
  2003-10-24 10:48:45.656000  24-OCT-03 10.48.45.656000 AM +08:00
  可以看到,毫秒在to_char中对应的是FF。
  
  SQL> select to_timestamp('2003-10-24 10:48:45.656000','yyyy-mm-dd hh24:mi:ssxff') from dual;
  
  TO_TIMESTAMP('2003-10-2410:48:
  -------------------------------------------------
  24-10月-03 10.48.45.656000000 上午
 
22.
floor((date2-date1) /365) 作为年
floor((date2-date1, 365) /30) 作为月
mod(mod(date2-date1, 365), 30)作为日.
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 
1 2 3 4 5 6 7 
日 一 二 三 四 五 六 
 
24.取出一个时间段中星期日星期六的天数
function weekends( p_date1 in date, p_date2 in date )
return number
as
   l_date1 date default least(p_date1,p_date2);
   l_date2 date default greatest(p_date1,p_date2);
   l_days number default trunc(l_date2-l_date1)+1;
   l_cnt  number;
begin
   select count(*) into l_cnt
    from (select rownum r 
        from all_objects where rownum <= l_days)
   where to_char(l_date1+r-1,'dy') in ( 'sat','sun' );
 
   return l_cnt;
end;
分页: 1/80 第一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下页 最后页 [ 显示模式: 摘要 | 列表 ]