- Jan 27 Tue 2015 15:35
-
java内部字符编码浅析
- Dec 05 Fri 2014 10:53
-
該死的難找的Shell Bug
因專案DB移轉,相關後端轉檔程式也由Unix環境移至Lunix環境,程式單純移轉無透過Windos編輯及發生問題,但錯誤訊息提供的資訊也是錯誤的
異常原因是因部分中文字在Unix、Lunix的Shell中很容易出現異常,導致程式執行失敗
此問題非常難找,沒辦法透過錯誤訊息Debug,只能將幾百行的程式碼一段一段移除在透過sh -x ShellName.sct執行看錯誤訊息的變化,所以還是少在Shell使用中文為妙
已下紀錄為紀錄遇到的異常中文清單
異常原因是因部分中文字在Unix、Lunix的Shell中很容易出現異常,導致程式執行失敗
此問題非常難找,沒辦法透過錯誤訊息Debug,只能將幾百行的程式碼一段一段移除在透過sh -x ShellName.sct執行看錯誤訊息的變化,所以還是少在Shell使用中文為妙
已下紀錄為紀錄遇到的異常中文清單
- Nov 03 Mon 2014 13:02
-
(轉)Java FilenameFilter 文件名过滤器的使用 File.listFiles得到指定类型文件
原文連結
在Java里,File类有个listFiles方法可以得到指定目录里的所有文件列表,并返回一个File数组。有时我们只需要某些指定类型的文件,比如说jpg图片,listFiles可以通过传入FilenameFilter参数来过滤文件。
FilenameFilter是一个接口,不能直接实例化,所以要先写个类来继承它:
在Java里,File类有个listFiles方法可以得到指定目录里的所有文件列表,并返回一个File数组。有时我们只需要某些指定类型的文件,比如说jpg图片,listFiles可以通过传入FilenameFilter参数来过滤文件。
FilenameFilter是一个接口,不能直接实例化,所以要先写个类来继承它:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ImageFilter implements FilenameFilter{
public boolean isJpg(String filename){
if (filename.toLowerCase().endsWith(".jpg")){
//把文件转成小写后看其后缀是否为.jpg
return true;
}else{
return false;
}
}
@Override
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
return isJpg(filename);
//覆写accept方法
}
}
- Sep 20 Sat 2014 20:48
-
ResultSet 指標回到第一行之前
- Sep 20 Sat 2014 20:43
-
各處燒殺擄掠來的Java Utility(個人備忘使用)
/* 計算某字元出現在字串中幾次
* Para 1.String 主字串
* 2.String 要搜尋的字元
* out 1.int 出現次數
* */
public int numberOfKeywords(String strText,String keyword){
int count = 0;
String strTmp="";
for(int i=0;i<strText.length();i++){
strTmp= String.valueOf(strText.charAt(i));
//System.out.println(i+":"+strTmp);
if(keyword.equals(strTmp)){
count++;
}
}
return count;
}
* Para 1.String 主字串
* 2.String 要搜尋的字元
* out 1.int 出現次數
* */
public int numberOfKeywords(String strText,String keyword){
int count = 0;
String strTmp="";
for(int i=0;i<strText.length();i++){
strTmp= String.valueOf(strText.charAt(i));
//System.out.println(i+":"+strTmp);
if(keyword.equals(strTmp)){
count++;
}
}
return count;
}
- Sep 18 Thu 2014 17:49
-
oracle建立可執行所有DDL的Procedure
建立可執行任何DDL SQL的Procedure
CREATE OR REPLACE PROCEDURE PPXMMGR.anyddl (s1 varchar2) as
cursor1 integer;
begin
cursor1 := dbms_sql.open_cursor;
dbms_sql.parse(cursor1, s1, dbms_sql.v7);
dbms_sql.close_cursor(cursor1);
end;
CREATE OR REPLACE PROCEDURE PPXMMGR.anyddl (s1 varchar2) as
cursor1 integer;
begin
cursor1 := dbms_sql.open_cursor;
dbms_sql.parse(cursor1, s1, dbms_sql.v7);
dbms_sql.close_cursor(cursor1);
end;
- Sep 16 Tue 2014 17:45
-
Java Mail標題亂碼
使用Java Mail發信件遇到信件標題中文出現亂碼,但信件內文卻不會出現亂碼,但是兩個中文來源都是同一個中文。
因標題只接受US-ASCII編碼,如果標題中文為其他編碼,就需要使用java mail的mothod將字串轉碼。
因標題只接受US-ASCII編碼,如果標題中文為其他編碼,就需要使用java mail的mothod將字串轉碼。
- Sep 11 Thu 2014 18:24
-
oracle Stored Procedure 切割字串語法(類似substring,split)
因轉檔程式需求改變,Stored Procedure由切割固定長度改由特殊符號分隔,所以找紀錄一下SQL語法
單純以欄位長度切割SQL:
select rtrim(ltrim(substr('20140701^080300^0026^11110007^4800361002974^雀巢 雀巢美祿可可球170g^20140730^^18^0^51.81^0^七日未到貨^307^93^7^18^0^10^0^',
10,6)))
from dual
單純以欄位長度切割SQL:
select rtrim(ltrim(substr('20140701^080300^0026^11110007^4800361002974^雀巢 雀巢美祿可可球170g^20140730^^18^0^51.81^0^七日未到貨^307^93^7^18^0^10^0^',
10,6)))
from dual
- Sep 11 Thu 2014 11:57
-
(轉載) Oracle 效能調校之如何正確使用SQL
原作者網址:http://pighead2002.pixnet.net/blog/post/56706340-oracle-%E6%95%88%E8%83%BD%E8%AA%BF%E6%A0%A1%E4%B9%8B%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A2%BA%E4%BD%BF%E7%94%A8sql
1、避免在索引欄上使用IS NULL 或IS NOT NULL
1、避免在索引欄上使用IS NULL 或IS NOT NULL
- Sep 10 Wed 2014 16:39
-
Materialized View 相關參考
create Materialized View介紹
http://mylinoraclesql.blogspot.tw/2013/09/create-materialized-view.html
http://py3939.pixnet.net/blog/post/25399529-create-materialized-view
http://mylinoraclesql.blogspot.tw/2013/09/create-materialized-view.html
http://py3939.pixnet.net/blog/post/25399529-create-materialized-view
- Sep 10 Wed 2014 16:38
-
(轉載) Oracle各種日期計算方法
一個月的第一天
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')
FROM dual
sysdate 為數據庫服務器的當前系統時間。
to_char 是將日期型轉為字符型的函數。
to_date 是將字符型轉為日期型的函數,一般使用 yyyy-mm-dd hh24:mi:ss格式,當沒有指定時間部分時,則默認時間為 00:00:00
dual 表為sys用戶的表,這個表僅有一條記錄,可以用於計算一些表達式,如果有好事者用 sys 用戶登錄系統,然後在 dual 表增加了記錄的話,那麼系統99.999%不能使用了。為什麼使用的時候不用 sys.dual 格式呢,因為 sys 已經為 dual 表建立了所有用戶均可使用的別名。
一年的第一天
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(
to_char(SYSDATE,'yyyy')||'-01-01','yyyy-mm-dd'
)
FROM dual
季度的第一天
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01',
'yyyy-mm-dd')
FROM dual
floor 為向下取整
lpad 為向左使用指定的字符擴充字符串,這個擴充字符串至2位,不足的補'0'。
當天的半夜
SELECT trunc(SYSDATE)+1-1/24/60/60
FROM dual
trunc 是將 sysdate 的時間部分截掉,即時間部分變成 00:00:00
Oracle中日期加減是按照天數進行的,所以 +1-1/24/60/60 使時間部分變成了 23:59:59。
Oracle 8i 中僅支持時間到秒,9i以上則支持到 1/100000000 秒。
上個月的最後一天
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(last_day(add_months(SYSDATE,-1)))+1-1/24/60/60
FROM dual
add_months 是月份加減函數。
last_day 是求該月份的最後一天的函數。
本年的最後一天
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(
last_day(to_date(to_char(SYSDATE,'yyyy')||'-12-01','yyyy-mm-dd'))
)+1-1/24/60/60
FROM dual
本月的最後一天
代碼 (雙擊代碼複製到粘貼板)
select trunc(last_day(sysdate))+1-1/24/60/60
from dual
本月的第一個星期一
代碼 (雙擊代碼複製到粘貼板)
SELECT next_day(
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd'),
'星期一'
)
FROM dual
next_day 為計算從指定日期開始的第一個符合要求的日期,這裡的'星期一'將根據NLS_DATE_LANGUAGE的設置稍有不同。
去掉時分秒
代碼 (雙擊代碼複製到粘貼板)
select trunc(sysdate)
from dual
顯示星期幾
代碼 (雙擊代碼複製到粘貼板)
SELECT to_char(SYSDATE,'Day')
FROM dual
取得某個月的天數
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(last_day(SYSDATE))-
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')+
1
FROM dual
判斷是否閏年
代碼 (雙擊代碼複製到粘貼板)
SELECT decode(
to_char(last_day(to_date(to_char(SYSDATE,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'),
'28','平年','閏年'
)
FROM dual
一個季度多少天
代碼 (雙擊代碼複製到粘貼板)
SELECT last_day(to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+3,2,'0')||
'-01','yyyy-mm-dd'
)
)
-
to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01','yyyy-mm-dd')
+1
FROM dual
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')
FROM dual
sysdate 為數據庫服務器的當前系統時間。
to_char 是將日期型轉為字符型的函數。
to_date 是將字符型轉為日期型的函數,一般使用 yyyy-mm-dd hh24:mi:ss格式,當沒有指定時間部分時,則默認時間為 00:00:00
dual 表為sys用戶的表,這個表僅有一條記錄,可以用於計算一些表達式,如果有好事者用 sys 用戶登錄系統,然後在 dual 表增加了記錄的話,那麼系統99.999%不能使用了。為什麼使用的時候不用 sys.dual 格式呢,因為 sys 已經為 dual 表建立了所有用戶均可使用的別名。
一年的第一天
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(
to_char(SYSDATE,'yyyy')||'-01-01','yyyy-mm-dd'
)
FROM dual
季度的第一天
代碼 (雙擊代碼複製到粘貼板)
SELECT to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01',
'yyyy-mm-dd')
FROM dual
floor 為向下取整
lpad 為向左使用指定的字符擴充字符串,這個擴充字符串至2位,不足的補'0'。
當天的半夜
SELECT trunc(SYSDATE)+1-1/24/60/60
FROM dual
trunc 是將 sysdate 的時間部分截掉,即時間部分變成 00:00:00
Oracle中日期加減是按照天數進行的,所以 +1-1/24/60/60 使時間部分變成了 23:59:59。
Oracle 8i 中僅支持時間到秒,9i以上則支持到 1/100000000 秒。
上個月的最後一天
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(last_day(add_months(SYSDATE,-1)))+1-1/24/60/60
FROM dual
add_months 是月份加減函數。
last_day 是求該月份的最後一天的函數。
本年的最後一天
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(
last_day(to_date(to_char(SYSDATE,'yyyy')||'-12-01','yyyy-mm-dd'))
)+1-1/24/60/60
FROM dual
本月的最後一天
代碼 (雙擊代碼複製到粘貼板)
select trunc(last_day(sysdate))+1-1/24/60/60
from dual
本月的第一個星期一
代碼 (雙擊代碼複製到粘貼板)
SELECT next_day(
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd'),
'星期一'
)
FROM dual
next_day 為計算從指定日期開始的第一個符合要求的日期,這裡的'星期一'將根據NLS_DATE_LANGUAGE的設置稍有不同。
去掉時分秒
代碼 (雙擊代碼複製到粘貼板)
select trunc(sysdate)
from dual
顯示星期幾
代碼 (雙擊代碼複製到粘貼板)
SELECT to_char(SYSDATE,'Day')
FROM dual
取得某個月的天數
代碼 (雙擊代碼複製到粘貼板)
SELECT trunc(last_day(SYSDATE))-
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')+
1
FROM dual
判斷是否閏年
代碼 (雙擊代碼複製到粘貼板)
SELECT decode(
to_char(last_day(to_date(to_char(SYSDATE,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'),
'28','平年','閏年'
)
FROM dual
一個季度多少天
代碼 (雙擊代碼複製到粘貼板)
SELECT last_day(to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+3,2,'0')||
'-01','yyyy-mm-dd'
)
)
-
to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01','yyyy-mm-dd')
+1
FROM dual
- Sep 05 Fri 2014 13:33
-
Oracle DIRECTORY
需要使用Oracle stored procedure 使用UTL_FILE這類需要讀取實體檔案的需要先設定DIRECTORY
DIRECTORY語法如下
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
DIRECTORY語法如下
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';