優化Spring啟動速度 | ||||
spring的容器是提供了lazy-load,缺省設置是bean沒有lazy-load,該屬性處于false狀態。
把beans的default-lazy-init改為true就,再次啟動,可以大大降低啟動時間
|
||||
|
||||
|
||||
|
||
Disable Hibernates usage of cglib reflection optimizer | ||||
Put the following line in hibernate.properties: hibernate.cglib.use_reflection_optimizer=false |
||||
|
||||
|
||||
|
||
Use serialized XML documents when configuring Configuration | ||||
When building the configuration 40-60% of the time is used by the XML parsers and Dom4j to read up the XML document. Significant performance increases can be done by serializing the Document object's to disc once, and afterwards just add them to the configuration by deserializing them first. In the current cvs we have an experimental Configuration.addCachableFile() method that can be used as inspiration for previous Hibernate versions. public Configuration addCachableFile(String xmlFile) throws MappingException { try { File file = new File(xmlFile); File lazyfile = new File(xmlFile + ".bin"); org.dom4j.Document doc = null; List errors = new ArrayList(); if(file.exists() && lazyfile.exists() && file.lastModified()<lazyfile.lastModified()) { log.info("Mapping lazy file: " + lazyfile.getPath()); ObjectInputStream oip = null; oip = new ObjectInputStream(new FileInputStream(lazyfile)); doc = (org.dom4j.Document) oip.readObject(); oip.close(); } else { doc = xmlHelper.createSAXReader(xmlFile, errors, entityResolver).read( file ); log.info("Writing lazy file to " + lazyfile); ObjectOutputStream oup = new ObjectOutputStream(new FileOutputStream(lazyfile)); oup.writeObject(doc); oup.flush(); oup.close(); } if ( errors.size()!=0 ) throw new MappingException( "invalid mapping", (Throwable) errors.get(0) ); add(doc); return this; } catch (Exception e) { log.error("Could not configure datastore from file: " + xmlFile, e); throw new MappingException(e); } } |
||||
|
||||
|
||||
|
||
7月14日 | ||||
iSQL*PLUS | ||||
Enterprise Manager Database Control URL - (orcl) :
http://name:1158/em iSQL*Plus URL 為:
http://name:5560/isqlplus iSQL*Plus DBA URL 為:
http://name:5560/isqlplus/dba |
||||
|
||||
|
||||
|
||
7月12日 | ||||
JDBC學習筆記——JDBC性能優化(轉) | ||||
作者:佚名????來自:CSDN (1)選擇正確的jdbc驅動程序: (2)優化Connection對象: (3)Statement 優化: 批量修改數據庫 批量地從數據庫中取數據: (4)優化ResultSet: 其他方面的性能優化 |
||||
|
||||
|
||||
|
||
7月11日 | ||||
設計模式的一個單詞解釋 | ||||
PO:persistant object 持久對象,可以看成是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄可以用PO的集合。PO中應該不包含任何對數據庫的操作。
VO:value object值對象。通常用于業務層之間的數據傳遞,和PO一樣也是僅僅包含數據而已。但應是抽象出的業務對象,可以和表對應,也可以不,這根據業務的需要.個人覺得同DTO(數據傳輸對象),在web上傳遞。 DAO:data access object 數據訪問對象,此對象用于訪問數據庫。通常和PO結合使用,DAO中包含了各種數據庫的操作方法。通過它的方法,結合PO對數據庫進行相關的操作。 BO:business object 業務對象,封裝業務邏輯的java對象,通過調用DAO方法,結合PO,VO進行業務操作。 POJO:plain ordinary java object 簡單無規則java對象,我個人覺得它和其他不是一個層面上的東西,VO和PO應該都屬于它。 |
||||
|
||||
|
||||
|
||
結合struts和hibernate談J2EE架構的數據表示 (轉) | ||||
此篇文章來源:
http://forum.hibernate.org.cn/
?
在 struts+ hibernate 這種結構中,是不應該把Hibernate產生的PO直接傳遞給JSP的,不管他是Iterator,還是List,這是一個設計錯誤。
我來談談在J2EE架構中各層的數據表示方法: Web層的數據表示是FormBean,數據來源于HTML Form POST 業務層的數據表示是VO 持久層的數據表示是PO,其數據來源于數據庫,持久層的數據表示例如CMP 在一個規范的J2EE架構中,不同層的數據表示應該被限制在層內,而不應該擴散到其它層,這樣可以降低層間的耦合性,提高J2EE架構整體的可維護性和可擴展性。比如說Web層的邏輯進行了修改,那么只需要修改FormBean的結構,而不需要觸動業務層和持久層的代碼修改。同樣滴,當數據庫表進行了小的調整,那么也只需要修改持久層數據表示,而不需要觸動業務層代碼和Web層代碼。 不過由于Hibernate的強大功能,例如動態生成PO,PO的狀態管理可以脫離Session,使得在應用了Hibernate的J2EE框架中,PO完全可以充當VO,因此我們下面把PO和VO合并,統稱為PO。 先來談談ActionFormBean和持久層的PO之間的重大區別。 在簡單的應用中,ActionFormBean和PO幾乎是沒有區別,所以很多人干脆就是用ActionFormBean來充當PO,于是ActionFormBean從JSP頁面到Servlet控制層再到業務層,然后穿過持久層,最后一直映射到數據庫表。真是一竿子捅到了底! 但是在復雜的應用中,ActionFormBean和PO是分離的,他們也不可能一樣。ActionFormBean是和網頁里面的Form表單一一對應的,Form里面有什么元素,Bean里面就有什么屬性。而PO和數據庫表對應,因此如果數據庫表不修改,那么PO也不會修改,如果頁面的流程和數據庫表字段對應關系不一致,那么你又如何能夠使用ActionFormBean來取代PO呢? 比如說吧,用戶注冊頁面要求注冊用戶的基本信息,因此HTML Form里面包含了基本信息屬性,于是你需要一個ActionFormBean來一一對應(注意:是一一對應),每個Bean屬性對應一個文本框或者選擇框什么的。 而用戶這個持久對象呢?他的屬性和ActionFormBean有什么明顯不同呢?他會有一些ActionFormBean所沒有的集合屬性,比如說用戶的權限屬性,用戶的組屬性,用戶的帖子等等。另外還有可能的是在ActionFormBean里面有3個屬性,分別是用戶的First Name, Middle Name, Last Name,而在我的User這個持久對象中就是一個 Name 對象屬性。 假設我的注冊頁面原來只要你提供First Name,那么ActionFormBean就這一個屬性,后來我要你提供全名,你要改ActionFormBean,加兩個屬性。但是這個時候PO是不應該修改滴,因為數據庫沒有改。 那么在一個完整的J2EE系統中應該如何進行合理的設計呢? JSP(View) ---> ActionFormBean(Module) ---> Action(Control) ActionFormBean是Web層的數據表示,它和HTML頁面Form對應,只要Web頁面的操作流程發生改變,它就要相應的進行修改,它不應該也不能被傳遞到業務層和持久層,否則一旦頁面修改,會一直牽連到業務層和持久層的大面積的代碼進行修改,對于軟件的可維護性和可擴展性而言,是一個災難,Actiont就是他的邊界,到此為止! Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB 而PO則是業務層和持久層的數據表示,它在業務層和持久層之間進行流動,他不應該也不能被傳遞到Web層的View中去,而ActionServlet就是他的邊界,到此為止! 然后來看一看整個架構的流程: 當用戶通過瀏覽器訪問網頁,提交了一個頁面。于是Action拿到了這個FormBean,他會把FormBean屬性讀出來,然后構造一個PO對象,再調用業務層的Bean類,完成了注冊操作,重定向到成功頁面。而業務層Bean收到這個PO對象之后,調用DAO接口方法,進行持久對象的持久化操作。 當用戶查詢某個會員的信息的時候,他用全名進行查詢,于是Action得到一個UserNameFormBean包括了3個屬性,分別是first name, middle name, last name,然后Action把UserNameFormBean的3個屬性讀出來,構造Name對象,再調用業務Bean,把Name對象傳遞給業務Bean,進行查詢。 業務Bean取得Name(注意: Name對象只是User的一個屬性)對象之后調用DAO接口,返回一個User的PO對象,注意這個User不同于在Web層使用的UserFormBean,他有很多集合屬性滴。然后業務Bean把User對象返回給Action。 Action拿到User之后,把User的基本屬性取出(集合屬性如果不需要就免了),構造UserFormBean,然后把UserFormBean request.setAttribute(...),然后重定向到查詢結果頁面。 查詢頁面拿到request對象里面的ActionFormBean,自動調用tag顯示之。 總結: FormBean是Web層的數據表示,他不能被傳遞到業務層;PO是持久層的數據表示,在特定情況下,例如Hibernate中,他可以取代VO出現在業務層,但是不管PO還是VO都必須限制在業務層內使用,最多到達Web層的Control,絕不能被擴散到View去。 FormBean和PO之間的數據轉化是在Action中進行滴。 BTW: JDO1.x還不能像Hibernate功能這樣強大,PO不能脫離持久層,所以必須在業務層使用VO,因此必須在業務層進行大量的VO和PO的轉化操作,相對于Hibernate來說,編程比較煩瑣。 當然咯,理論是一回事,實際操作也不一定非要這樣干,你可以自行取舍,在實際項目中靈活一點,增加一點bad smell,提高開發效率。只不過在大型項目中最好還是嚴絲合縫,不然的話,改版的時候會痛苦的很滴。 |
||||
|
||||
|
||||
|
||
7月4日 | ||||
properties文件編碼 | ||||
native2ascii -encoding gb2312 a.properties b.properties
|
||||
|
||||
|
||||
|
||
6月21日 | ||||
修改XP Search 的準確性和速度 | ||||
更準:Windows XP默認不會搜索某些目錄中的文件,且其對文件內搜索的支持也不是很完善,我們可以以下方法讓搜索的結果更為全面:運行“Regedit”命令打開注冊表編輯器,定位到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer”,在右邊窗口中分別將CaseSensitive、IncludeSubFolders、SearchHidden、SearchSlowFiles、SearchSystemDirs(如果沒有則新建,其類型為REG_DWORD)的值修改為1,這樣可以最大限度擴大搜索目錄。接下來定位到“HKEY_CLASSES_ ROOT”分支,這里是控制文件內搜索所支持的文件類型,我們可以將幾種比較常見的文件類型添加進去,以新建其對htm格式文件內搜索支持為例,方法是:在該分支新建一個名為“HTM”的項,再在HTM項新建一個名為“PersistentHandler”并將其默認值修改為“{5e941d80- bf96-11cd-b579- 08002b30bfeb}”。 更快:上面介紹了如何讓搜索結果更多的技巧,那樣的代價就是搜索速度的緩慢,如果你想讓搜索更快,那么可以將“HKEY_CLASSES_ROOT”分支下不需要的文件類似刪除。我們打開搜索窗口,依次單擊“改變首選項→使用制作索引服務”將其開啟,這樣在我們系統處于空閑狀態時,系統會自動將本機文件編制索引并加以維護,提高搜索速度。 |
||||
|
||||
|
||||
|
||
6月8日 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
世界杯時間表。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||
6月7日 | ||||
SQL Server中各個系統表的作用 | ||||
sysaltfiles???????? ?? 主數據庫???????????????保存數據庫的文件
syscharsets????? ? 主數據庫???????????????字符集與排序順序 sysconfigures? ?? 主數據庫???????????????配置選項 syscurconfigs???? 主數據庫???????????????當前配置選項 sysdatabases??? 主數據庫???????????????服務器中的數據庫 syslanguages??? 主數據庫???????????????語言 syslogins??????????? 主數據庫???????????????登陸帳號信息 sysoledbusers?? 主數據庫???????????????鏈接服務器登陸信息 sysprocesses??? 主數據庫???????????????進程 sysremotelogins 主數據庫???????????????遠程登錄帳號 syscolumns??????? 每個數據庫?????????????列 sysconstrains???? 每個數據庫?????????????限制 sysfilegroups????? 每個數據庫?????????????文件組 sysfiles???????????????? 每個數據庫?????????????文件 sysforeignkeys? ?每個數據庫?????????????外部關鍵字 sysindexs????????? ? 每個數據庫?????????????索引 sysmenbers???????每個數據庫?????????????角色成員 sysobjects????????? ?每個數據庫?????????????所有數據庫對象 syspermissions?每個數據庫?????????????權限 systypes??????????? ?? 每個數據庫?????????????用戶定義數據類型 sysusers????????????? 每個數據庫?????????????用戶 |
||||
|
||||
|
||||
|
||
5月30日 | ||||
每滾動一條信息停頓javascript | ||||
<DIV id=scroll_image onmouseover=bMouseOver=0 style="OVERFLOW: hidden; WIDTH: 202px; HEIGHT: 20px" onmouseout=bMouseOver=1>
?????<SCRIPT language=javascript> ?????var scrollerheight=20; ?????var html,total_area=0,wait_flag=true; ?????var bMouseOver = 1; ?????var scrollspeed = 1; ?????var waitingtime = 3500; ?????var s_tmp = 0, s_amount = 20; ?????var scroll_content=new Array(); ?????var startPanel=0, n_panel=0, i=0; ?????function startscroll()
?????{ ?????i=0; ?????for (i in scroll_content) ?????n_panel++; ?????n_panel = n_panel -1 ;
?????startPanel = Math.round(Math.random()*n_panel); ?????if(startPanel == 0)
?????{ ?????i=0; ?????for (i in scroll_content) ?????insert_area(total_area, total_area++); ?????} ?????else if(startPanel == n_panel) ?????{ ?????insert_area(startPanel, total_area); ?????total_area++; ?????for (i=0; i<startPanel; i++) ?????{ ?????insert_area(i, total_area); ?????total_area++; ?????} ?????} ?????else if((startPanel > 0) || (startPanel < n_panel)) ?????{ ?????insert_area(startPanel, total_area); ?????total_area++; ?????for (i=startPanel+1; i<=n_panel; i++) ?????{ ?????insert_area(i, total_area); ?????total_area++; ?????} ?????for (i=0; i<startPanel; i++) ?????{ ?????insert_area(i, total_area); ?????total_area++; ?????} ?????} ?????window.setTimeout("scrolling()",waitingtime); ?????} ?????function scrolling(){ ?????if (bMouseOver && wait_flag) ?????{ ?????for (i=0;i<total_area;i++){ ?????tmp = document.getElementById('scroll_area'+i).style; ?????tmp.top = parseInt(tmp.top)-scrollspeed; ?????if (parseInt(tmp.top) <= -scrollerheight){ ?????tmp.top = scrollerheight*(total_area-1); ?????} ?????if (s_tmp++ > (s_amount-1)*scroll_content.length){ ?????wait_flag=false; ?????window.setTimeout("wait_flag=true;s_tmp=0;",waitingtime); ?????} ?????} ?????} ?????window.setTimeout("scrolling()",1); ?????} ?????function insert_area(idx, n){ ?????html='<div style="left: 0px; width: 100%; position: absolute; top: '+(scrollerheight*n)+'px" id="scroll_area'+n+'">'; ?????html+=scroll_content[idx]; ?????html+='</div>'; ?????document.write(html); ?????} ?????var newsVar = 0; ?????<% ??????Iterator it=col.iterator(); ??????EScheduleDto dto=null; ??????int i=0; ??????while(it.hasNext()){ ???????dto=(EScheduleDto) it.next(); ?????%> ?????scroll_content[<%=i++%>]='<a href="javascript:refreshleftmenu(\'4\',\'4021\',\'/edoas2/shiwuchuli/opentheschedule?id=<%=dto.getEId()%>\');"><font style="font-size:10pt; text-decoration:none; color:red"><%=dto.getETitle()%></font></a>'; ?????<% ??????} ?????%> ?????</SCRIPT> ?????<SCRIPT>startscroll();</SCRIPT> ?????</DIV> |
||||
|
||||
|
||||
|
||
5月15日 | ||||
替換html代碼 | ||||
res = res.replaceAll("&", "&");
res = res.replaceAll("<", "<"); res = res.replaceAll(">", ">"); res = res.replaceAll("'", "'"); res = res.replaceAll("\"", """); res = res.replaceAll("\n", "<br/>"); res = res.replaceAll("\r", ""); res = res.replaceAll(" ", " "); |
||||
|
||||
|
||||
|
||
5月5日 | ||||
痛苦的五一假期 | ||||
?今天已經是五月五號了 已經加了3天班了 正經就五月一號和三號給我們休息 三號還是應為公司停電,要不然也要加班 。
![]() ? 一號那天在家好好的休息了一天 已經好長時間沒有在家休息了 偶爾在家休息一天還有點不太習慣 ?已經習慣了這種天天加班的生活 真不明白 為什么 “程序員”=“加班” 這個公式是誰發明的
?二號在公司加了一天班 到了晚上跟幾個同事去參加第二天另一個同事的婚禮,做了三個多小時的車才到( 好遠呀 快到河北了) 第一次看到農村的婚禮原來是這樣大家在家里吃吃喝喝的也挺爽的 跟她同事玩了一宿牌 等著明天參加婚禮 嘿嘿!
?三號 早上4點跟同事去接新娘 到了路上我才知道 原來我是“伴郎” 暈!~ 沒有一點準備 只好趕鴨子上架了 到了新娘家跟同事去娶親 原來這是個體力活 需要良好的身體素質才能把門打開 還好新郎身材比較魁梧 (忽然想到了自己 ,現在開始每天鍛煉身體 ,為將來做準備 嘿嘿
![]() ![]() ?四號 在郁悶無奈中加了一天的班
?五號 上午干的還不錯 實現了不少功能 中午吃完飯 忽然很郁悶不知道怎么回事就想跟別人聊聊,也不知道跟誰聊好 就上來寫寫 想想自己一個人要是不加班還真不知到 該去干什么 (只能這么安慰自己)
|
||||
|
||||
|
||||
|
||
ANT安裝、配置 | ||||
ANT安裝、配置 內容摘要:
任務1:usage 打印本腳本的幫助信息(缺省) 注:我看到很多項目的ant腳本中的命名基本上都是一致的,比如:編譯一般叫build或者compile;打包一般叫jar或war;生成文檔一般命名為javadoc或javadocs;執行全部任務all。在每個任務的中,ANT會根據配置調用一些外部應用并配以相應參數執行。雖然ANT可調用的外部應用種類非常豐富,但其實最常用的就2,3個:比如javac javadoc jar等。 這樣執行ant 后,如果不指定配置文件ant會缺省找build.xml這個配置文件,并根據配置文件執行任務,缺省的任務設置可以指向最常用的任務,比如: build,或指向打印幫助信息:usage,告訴用戶有那些腳本選項可以使用。
最好的學習過程就是看懂那些open source項目中的build.xml腳本,然后根據自己的需要簡化成一個更簡單的,ANT和APACHE上很多非常工程派的項目:簡單易用,而且適應性非常強,因為這些項目的建立往往來源于開發人員日常最直接的需求。 <project default="usage" basedir="."> <!-- =================================================================== --> <echo message="----------- ${Name} ${version} [${year}] ------------"/> <property name="debug" value="off"/> <property name="src.dir" value="./src/WEB-INF/src"/> <property name="build.src" value="./src/WEB-INF/build"/> <path id="classpath"> <filter token="year" value="${year}"/> <!-- =================================================================== --> <!-- =================================================================== --> <!-- copy src files --> <!-- =================================================================== --> <!-- =================================================================== --> <!-- =================================================================== --> <!-- =================================================================== --> 缺省任務:usage 打印幫助文檔,告訴有那些任務選項:可用的有build, jar, javadoc和clean. 初始化環境變量:init 1 除了使用卻缺省的property設置了JAVA源路徑和輸出路徑外,引用了一個外部的build.properties文件中的設置, 2 CLASSPATH設置:使用了其中的: 文件復制:prepare-src <!-- copy src files --> 編譯任務:build 打包任務:jar 生成JAVADOC文檔任務: javadoc 清空臨時編譯文件:clean TODO: 測試任務:JUnit測試 |
||||
|
||||
|
||||
|
||
4月29日 | ||||
《短歌行》 | ||||
對酒當歌,人生幾何?譬如朝露,去日苦多。 概當以慷,憂思難忘。何以解憂?唯有杜康。 青青子衿,悠悠我心。但為君故,沈吟至今。 呦呦鹿鳴,食野之蘋。我有嘉賓,鼓瑟吹笙。 明明如月,何時可掇?憂從中來,不可斷絕。 越陌度阡,枉用相存。契闊談咽,心念舊恩。 月明星稀,烏鵲南飛。繞樹三匝,何枝可依。 山不厭高,海不厭深,周公吐哺,天下歸心。 |
||||
|
||||
|
||||
|
||
4月24日 |
SQLServer和Oracle常用函數對比 |
數學函數
1.絕對值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e為底的冪 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e為底的對數 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10為底對數 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16 10.取平方根 S:select SQRT(4) value 2 O:select SQRT(4) value from dual 2 11.求任意數為底的冪 S:select power(3,4) value 81 O:select power(3,4) value from dual 81 12.取隨機數 S:select rand() value O:select sys.dbms_random.value(0,1) value from dual; 13.取符號 S:select sign(-8) value -1 O:select sign(-8) value from dual -1 14.圓周率 S:SELECT PI() value 3.1415926535897931 O:不知道 15.sin,cos,tan 參數都以弧度為單位 例如:select sin(PI()/2) value 得到1(SQLServer) 16.Asin,Acos,Atan,Atan2 返回弧度 17.弧度角度互換(SQLServer,Oracle不知道) DEGREES:弧度-〉角度 RADIANS:角度-〉弧度 數值間比較 18. 求集合最大值 S:select max(value) value from (select 1 value union select -2 value union select 4 value union select 3 value)a O:select greatest(1,-2,4,3) value from dual 19. 求集合最小值 S:select min(value) value from (select 1 value union select -2 value union select 4 value union select 3 value)a O:select least(1,-2,4,3) value from dual 20.如何處理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl 21.求字符序號 S:select ascii('a') value O:select ascii('a') value from dual 22.從序號求字符 S:select char(97) value O:select chr(97) value from dual 23.連接 S:select '11'+'22'+'33' value O:select CONCAT('11','22') 33 value from dual 23.子串位置 --返回3 S:select CHARINDEX('s','sdsq',2) value O:select INSTR('sdsq','s',2) value from dual 23.模糊子串的位置 --返回2,參數去掉中間%則返回7 S:select patindex('%d%q%','sdsfasdqe') value O:oracle沒發現,但是instr可以通過第四個參數控制出現次數 select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6 24.求子串 S:select substring('abcd',2,2) value O:select substr('abcd',2,2) value from dual 25.子串代替 返回aijklmnef S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual 26.子串全部替換 S:沒發現 O:select Translate('fasdbfasegas','fa','我' ) value from dual 27.長度 S:len,datalength O:length 28.大小寫轉換 lower,upper 29.單詞首字母大寫 S:沒發現 O:select INITCAP('abcd dsaf df') value from dual 30.左補空格(LPAD的第一個參數為空格則同space函數) S:select space(10)+'abcd' value O:select LPAD('abcd',14) value from dual 31.右補空格(RPAD的第一個參數為空格則同space函數) S:select 'abcd'+space(10) value O:select RPAD('abcd',14) value from dual 32.刪除空格 S:ltrim,rtrim O:ltrim,rtrim,trim 33. 重復字符串 S:select REPLICATE('abcd',2) value O:沒發現 34.發音相似性比較(這兩個單詞返回值一樣,發音相同) S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比較soundex的差 返回0-4,4為同音,1最高 日期函數 35.系統時間 S:select getdate() value O:select sysdate value from dual 36.前后幾日 直接與整數相加減 37.求日期 S:select convert(char(10),getdate(),20) value O:select trunc(sysdate) value from dual select to_char(sysdate,'yyyy-mm-dd') value from dual 38.求時間 S:select convert(char(8),getdate(),108) value O:select to_char(sysdate,'hh24:mm:ss') value from dual 39.取日期時間的其他部分 S:DATEPART 和 DATENAME 函數 (第一個參數決定) O:to_char函數 第二個參數決定 參數---------------------------------下表需要補充 year yy, yyyy quarter qq, q (季度) month mm, m (m O無效) dayofyear dy, y (O表星期) day dd, d (d O無效) week wk, ww (wk O無效) weekday dw (O不清楚) Hour hh,hh12,hh24 (hh12,hh24 S無效) minute mi, n (n O無效) second ss, s (s O無效) millisecond ms (O無效) ---------------------------------------------- 40.當月最后一天 S:不知道 O:select LAST_DAY(sysdate) value from dual 41.本星期的某一天(比如星期日) S:不知道 O:SELECT Next_day(sysdate,7) vaule FROM DUAL; 42.字符串轉時間 S:可以直接轉或者select cast('2004-09-08'as datetime) value O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL; 43.求兩日期某一部分的差(比如秒) S:select datediff(ss,getdate(),getdate()+12.3) value O:直接用兩個日期相減(比如d1-d2=12.3) SELECT (d1-d2)*24*60*60 vaule FROM DUAL; 44.根據差值求新的日期(比如分鐘) S:select dateadd(mi,8,getdate()) value O:SELECT sysdate+8/60/24 vaule FROM DUAL; 45.求不同時區時間 S:不知道 O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; -----時區參數,北京在東8區應該是Ydt------- AST ADT 大西洋標準時間 BST BDT 白令海標準時間 CST CDT 中部標準時間 EST EDT 東部標準時間 GMT 格林尼治標準時間 HST HDT 阿拉斯加?夏威夷標準時間 MST MDT 山區標準時間 NST 紐芬蘭標準時間 PST PDT 太平洋標準時間 YST YDT YUKON標準時間 |