感于æ€ÀLœ‰äº›ç½‘勿å‡ÞZ¸€äº›éžå¸¸åŸº¼‹€çš„é—®é¢˜ï¼Œæ¯”å¦‚æœ‰æ²¡æœ‰å®žçŽ°æŸæŸåŠŸèƒ½çš„å‡½æ•°å•Šï¼ŒæŸæŸå‡½æ•°æ˜¯åšä»€ä¹ˆç”¨çš„啊åQŒæ ¼å¼æ˜¯ä»€ä¹ˆç‰½{‰ï¼ŒåŒæ—¶ä¹Ÿæ„Ÿå—到自己对oracle函数认识的丑»I¼ŒäºŽæ˜¯é›†ä¸æœˆä½™æ—‰™—´ä¸“注于oracle函数åQŒå°æœ‰å¿ƒå¾—䏿•¢ç§è—,å‘之与诸公共享ã€?
本文òq¶ä¸å‡†å¤‡ä»‹ç»å…¨éƒ¨çš„oracle函数åQŒå½“剿ƒ…势下åQŒä¿ºä¹Ÿè¿˜æ²¡è¿™ä¸ªæ—¶é—ß_¼Œéœ€è¦å¦ä¹ çš„ä¸œè¥¿å¤ªå¤šäº†ï¼Œè¦æŠŠå¤šæ•°æ—‰™—´èŠ±åœ¨å¦ä¹ ¾l常能用上的技术方é?)åQŒæ‰€ä»¥å¦‚果是准备深入了解所有oracle函数的朋å‹ï¼Œ˜q˜æ˜¯åŽÕd…³æ³¨ï¼šOracle SQL Reference官方文档更é è°×ƒ¸€äº›ã€?
本文更多ž®†ä¼šä»‹ç»ä¸‰æ€åœ¨æ—¥å¸¸ä¸ç»å¸æ€¼šç”¨åˆ°çš„,或者虽然很ž®‘用刎ͼŒä½†æ˜¯æ„Ÿè§‰æŒºæœ‰æ„æ€çš„一些函数。分二类介ç»åQŒåˆ†åˆ«æ˜¯åQ?
è‘—å函数½‹‡ã€€åQç»å¸¸ç”¨åˆ°çš„函数
éžè‘—å函数篇åQå³è™½ç„¶å¾ˆå°‘用到åQŒä½†æŸäº›æƒ…况下å´å¾ˆå®žç”?
注:N表示数å—型,C表示å—符型,D表示日期型,[]表示内ä¸å‚æ•°å¯è¢«å¿½ç•¥åQŒfmtè¡¨ç¤ºæ ¼å¼ã€?
å•值函数在查询ä¸è¿”回å•个å€û|¼Œå¯è¢«åº”用到selectåQŒwhereåå¥åQŒstart with以åŠconnect by åå¥å’Œhavingåå¥ã€?
(一).数值型函数(Number Functions)
数值型函数输入数å—åž‹å‚æ•°åƈ˜q”回数值型的倹{€‚多数该¾cÕd‡½æ•°çš„˜q”回值支æŒ?8ä½å°æ•°ç‚¹åQŒè¯¸å¦‚:COS, COSH, EXP, LN, LOG,
SIN, SINH, SQRT, TAN, and TANH 支æŒ36ä½å°æ•°ç‚¹ã€‚ACOS, ASIN, ATAN, and
ATAN2支æŒ30ä½å°æ•°ç‚¹ã€?
1ã€MOD(n1,n2) ˜q”回n1除n2的余敎ͼŒå¦‚æžœn2=0则返回n1的倹{€?
例如åQšSELECT MOD(24,5) FROM DUAL;
2�
ROUND(n1[,n2])
˜q”回四èˆäº”å…¥ž®æ•°ç‚¹å³è¾¹n2ä½åŽn1çš„å€û|¼Œn2¾~ºçœå€égØ“0åQŒå¦‚æžœn2䏸™´Ÿæ•°å°±èˆå…¥åˆ°å°æ•°ç‚¹å·¦è¾¹ç›¸åº”çš„ä½ä¸?虽然oracle
documents上æåˆ°n2的值必™åÖMؓ整数åQŒäº‹å®žä¸Šæ‰§è¡Œæ—¶æ¤å¤„的判æ–òq¶ä¸ä¸¥è°}åQŒå³ä½¿n2ä¸ºéžæ•´æ•°åQŒå®ƒä¹Ÿä¼šè‡ªåЍž®†n2å–æ•´åŽåšå¤„ç†åQŒä½†æ˜¯æˆ‘文档ä¸å…¶å®ƒæåˆ°å¿…™åÖMؓ整的地方需è¦ç‰¹åˆ«æ³¨æ„,如果ä¸äؓ整执行时会报错的)ã€?
例如åQšSELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL;
3ã€TRUNC(n1[,n2] ˜q”回截尾到n2ä½å°æ•°çš„n1çš„å€û|¼Œn2¾~ºçœè®„¡½®ä¸?åQŒå½“n2为缺çœè®¾¾|®æ—¶ä¼šå°†n1截尾为整敎ͼŒå¦‚æžœn2䏸™´Ÿå€û|¼Œž®±æˆªž®‘Öœ¨ž®æ•°ç‚¹å·¦è¾¹ç›¸åº”çš„ä½ä¸Šã€?
例如åQšSELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL;
(äº?.å—符型函数返回嗽W¦å€?Character Functions Returning Character Values)
该类函数˜q”回与输入类型相åŒçš„¾cÕdž‹ã€?
˜q”回的CHAR¾cÕdž‹å€¼é•¿åº¦ä¸‘…过2000å—节åQ?
˜q”回的VCHAR2¾cÕdž‹å€¼é•¿åº¦ä¸‘…过4000å—节åQ?
如果上述应返回的å—符长度‘…出åQŒoracleòq¶ä¸ä¼šæŠ¥é”™è€Œæ˜¯ç›´æŽ¥æˆªæ–è‡Ïxœ€å¤§å¯æ”¯æŒé•¿åº¦˜q”回ã€?
˜q”回的CLOB¾cÕdž‹å€¼é•¿åº¦ä¸‘…过4GåQ?
对于CLOB¾cÕdž‹çš„函敎ͼŒå¦‚æžœ˜q”回值长度超出,oracleä¸ä¼š˜q”回ä»ÖM½•错误而是直接抛出错误ã€?
1ã€LOWER(c) ž®†æŒ‡å®šå—½W¦ä¸²å†…å—½W¦å˜ä¸ºå°å†™ï¼Œæ”¯æŒCHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB¾cÕdž‹
例如åQšSELECT LOWER('WhaT is tHis') FROM DUAL;
2ã€UPPER(c) ž®†æŒ‡å®šå—½W¦ä¸²å†…å—½W¦å˜ä¸ºå¤§å†™ï¼Œæ”¯æŒCHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB¾cÕdž‹
例如åQšSELECT UPPER('WhaT is tHis') FROM DUAL;
3ã€LPAD(c1,n[,c2]) ˜q”回指定长度=n的嗽W¦ä¸²åQŒéœ€è¦æ³¨æ„çš„æœ‰å‡ ç‚¹ï¼š
如果n<c1.length则从å›_ˆ°å·¦æˆªå–指定长度返回;
如果n>c1.length and c2 is nullåQŒä»¥½Iºæ ¼ä»Žå·¦å‘å³è¡¥å……å—符长度至nòq¶è¿”回;
如果n>c1.length and c2 is not nullåQŒä»¥æŒ‡å®šå—符c2从左å‘å³è¡¥å……c1长度至nòq¶è¿”回;
例如åQšSELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL;
最åŽå¤§å®¶å†çŒœä¸€çŒœï¼Œå¦‚æžœn<0åQŒç»“果会怎么æ ?
4ã€RPAD(c1,n[,c2]) ˜q”回指定长度=n的嗽W¦ä¸²åQŒåŸºæœ¬ä¸Žä¸ŠåŒåQŒä¸˜q‡è¡¥å……å—½W¦æ˜¯ä»Žå³å‘å·¦æ–¹å‘æ£å¥½ä¸Žä¸Šç›¸ååQ?
例如åQšSELECT RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL;
5ã€TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1) 哈哈åQŒè¢«ä¿ºæ— æ•Œçš„å½¢å®¹æ–¹å¼æžæ™•头了å§ï¼Œ˜q™ä¸ªåœ°æ–¹˜q˜æ˜¯çœ‹å›¾æ›´æ˜Žäº†ä¸€äº›ã€?
看è“væ¥å¾ˆå¤æ‚åQŒç†è§£è“væ¥å¾ˆ½Ž€å•:
如果没有指定ä»ÖM½•傿•°åˆ™oracle去除c1头尾½Iºæ ¼
例如åQšSELECT TRIM(' WhaT is tHis ') FROM DUAL;
如果指定了c2傿•°åQŒåˆ™oracleåŽÀLމc1头尾c2(˜q™ä¸ªå»ø™®®¾l†è‡´‹¹‹è¯•åQŒæœ‰å¤šç§ä¸åŒæƒ…åŞ的哟)
例如åQšSELECT TRIM('W' FROM 'WhaT is tHis w W') FROM DUAL;
如果指定了leading傿•°åˆ™ä¼šåŽÀLމc1头部c2
例如åQšSELECT TRIM(leading 'W' FROM 'WhaT is tHis w W') FROM DUAL;
如果指定了trailing傿•°åˆ™ä¼šåŽÀLމc1ž®ùNƒ¨c2
例如åQšSELECT TRIM(trailing 'W' FROM 'WhaT is tHis w W') FROM DUAL;
如果指定了both傿•°åˆ™ä¼šåŽÀLމc1头尾c2(è·Ÿä¸æŒ‡å®šæœ‰åŒºåˆ«å—åQŸæ²¡åŒºåˆ«åQ?
例如åQšSELECT TRIM(both 'W' FROM 'WhaT is tHis w W') FROM DUAL;
注æ„åQšc2长度=1
6ã€LTRIM(c1[,c2]) åƒä¸‡è¡¨ä»¥ä¸ÞZ¸Žä¸Šé¢é‚£ä¸ªé•¿çš„åƒï¼ŒåŠŸèƒ½ä¹Ÿä¸Žä¸Šé¢çš„ç±»ä¼û|¼Œæœ¬å‡½æ•°æ˜¯ä»Žå—½W¦ä¸²c1å·¦ä¾§æˆªå–æŽ‰ä¸ŽæŒ‡å®šå—符串c2相åŒçš„å—½W¦åƈ˜q”回。如果c2为空则默认截å–ç©ºæ ¹{€?
例如åQšSELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL;
7ã€RTRIM(c1,c2)与上åŒï¼Œä¸è¿‡æ–¹å‘相å
例如åQšSELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL;
8ã€REPLACE(c1,c2[,c3]) ž®†c1å—符串ä¸çš„c2替æ¢ä¸ºc3åQŒå¦‚æžœc3为空åQŒåˆ™ä»Žc1ä¸åˆ 除所有c2ã€?
例如åQšSELECT REPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL;
9ã€SOUNDEX(c) ¼œžå¥‡çš„函数啊åQŒè¯¥å‡½æ•°˜q”回å—ç¬¦ä¸²å‚æ•°çš„è¯éŸ³è¡¨ç¤ºå½¢å¼åQŒå¯¹äºŽæ¯”较一些读音相åŒï¼Œä½†æ˜¯æ‹¼å†™ä¸åŒçš„å•è¯éžå¸¸æœ‰ç”¨ã€‚计½Ž—è¯éŸ³çš„½Ž—法如下åQ?
ä¿ç•™å—ç¬¦ä¸²é¦–å—æ¯åQŒä½†åˆ 除aã€eã€hã€iã€oã€wã€yã€?
ž®†ä¸‹è¡¨ä¸çš„æ•°å—赋¾l™ç›¸å¯¹åº”çš„å—æ¯ï¼š
1åQšbã€fã€pã€v
2åQšcã€gã€kã€qã€sã€xã€z
3åQšdã€t
4åQšl
5åQšmã€n
6åQšR
如果å—符串ä¸å˜åœ¨æ‹¥æœ‰ç›¸åŒæ•°å—çš?个以上(包å«2ä¸ªï¼‰çš„å—æ¯åœ¨ä¸€èµøP¼ˆä¾‹å¦‚bå’ŒfåQ‰ï¼Œæˆ–è€…åªæœ‰h或wåQŒåˆ™åˆ 除其他的,åªä¿ç•?个;
åªè¿”回å‰4个å—节,ä¸å¤Ÿç”?å¡«å……
例如åQšSELECT SOUNDEX('dog'),soundex('boy') FROM DUAL;
10ã€SUBSTR(c1,n1[,n2]) æˆªå–æŒ‡å®šé•¿åº¦çš„å—½W¦ä¸²ã€‚ç¨ä¸æ³¨æ„å°±å¯èƒ½å……满了陷é˜Þqš„函数ã€?
n1=开始长度;
n2=截å–的嗽W¦ä¸²é•¿åº¦åQŒå¦‚æžœäØ“½Iºï¼Œé»˜è®¤æˆªå–到嗽W¦ä¸²¾l“å°¾åQ?
ï?如果n1=0 then n1=1
ï?如果n1>0åQŒåˆ™oracle从左å‘å³¼‹®è®¤èµ·å§‹ä½ç½®æˆªå–
例如åQšSELECT SUBSTR('What is this',5,3) FROM DUAL;
ï?如果n1<0åQŒåˆ™oracle从å³å‘左数确认è“vå§‹ä½¾|?
例如åQšSELECT SUBSTR('What is this',-5,3) FROM DUAL;
ï?如果n1>c1.length则返回空
例如åQšSELECT SUBSTR('What is this',50,3) FROM DUAL;
ç„¶åŽå†è¯·ä½ 猜猜,如果n2<1åQŒä¼šå¦‚何˜q”回值呢
11�
TRANSLATE(c1,c2,c3)
ž®±åŠŸèƒ½è€Œè¨€åQŒæ¤å‡½æ•°ä¸Žreplaceæœ‰äº›ç›æ€¼¼ã€‚ä½†éœ€è¦æ³¨æ„的一ç‚ÒŽ˜¯åQŒtranslate是ç»å¯¹åŒ¹é…替æ¢ï¼Œ˜q™ç‚¹ä¸Žreplace函数å…ähœ‰éžå¸¸å¤§åŒºåˆ«ã€‚什么是¾l对匚w…替æ¢å‘¢ï¼Ÿ½Ž€å•çš„è¯ß_¼Œæ˜¯å°†å—符串c1䏿Œ‰ä¸€å®šçš„æ ¼å¼c2替æ¢ä¸ºc3。如果文å—åŞ容ä»ç„¶æ— 法ç†è§£ï¼Œæˆ‘ä»¬é€šè¿‡å‡ å…·å®žä¾‹æ¥è¯´æ˜Žï¼š
例如åQ?
SELECT TRANSLATE('What is this','','-') FROM DUAL;
SELECT TRANSLATE('What is this','-','') FROM DUAL;
¾l“果都是½Iºã€‚æ¥è¯•试˜q™ä¸ªåQ?
SELECT TRANSLATE('What is this',' ',' ') FROM DUAL;
冿¥çœ‹è¿™ä¸ªï¼š
SELECT TRANSLATE('What is this','ait','-*') FROM DUAL;
æ˜¯å¦æ˜Žç™½äº†ç‚¹å‘¢ï¼ŸReplace函数ç†è§£æ¯”较½Ž€å•,它是ž®†å—½W¦ä¸²ä¸æŒ‡å®šå—½W¦æ›¿æ¢æˆå…¶å®ƒå—符åQŒå®ƒçš„å—½W¦å¿…™åÀL˜¯˜qžç®‹çš„。而translateä¸ï¼Œåˆ™æ˜¯æŒ‡å®šå—符ä¸?
c1ä¸å‡ºçŽ°çš„c2åQŒå°†c2ä¸å„个嗽W¦æ›¿æ¢æˆc3ä¸ä½¾|®é¡ºåºä¸Žå…¶ç›¸åŒçš„c3ä¸çš„å—符。明白了åQŸReplace是替æ¢ï¼Œè€Œtranslateåˆ™åƒæ˜¯è¿‡æ»?/p>
(ä¸?.å—符型函数返回数å—å€?Character Functions Returning Number Values)
æœ¬ç±»å‡½æ•°æ”¯æŒæ‰€æœ‰çš„æ•°æ®¾cÕdž‹
1ã€INSTR(c1,c2[,n1[,n2]]) ˜q”回c2在c1ä¸ä½¾|?
c1:原嗽W¦ä¸²
c2:è¦å¯»æ‰„¡š„å—符ä¸?
n1:查询起始ä½ç½®åQŒæ£å€ÆD¡¨½CÞZ»Žå·¦åˆ°å»I¼Œè´Ÿå€ÆD¡¨½CÞZ»Žå›_ˆ°å·?(大å°è¡¨ç¤ºä½ç½®,比如3表示左颽W?处开å§?-3表示å³é¢½W?处开å§?。黑黑,如果ä¸?çš„è¯åQŒåˆ™˜q”回的也æ˜?
n2:½W¬å‡ 个匹é…项。大äº?
例如åQšSELECT INSTR('abcdefg','e',-3) FROM DUAL;
2ã€LENGTH(c) ˜q”回指定å—符串的长度。如æž?
例如åQšSELECT LENGTH('A123ä¸?) FROM DUAL;
猜猜SELECT LENGTH('') FROM DUAL;的返回值是什�
(�.日期函数(Datetime Functions)
本类函数ä¸ï¼Œé™¤months_between˜q”回数值外åQŒå…¶å®ƒéƒ½ž®†è¿”回日期ã€?
1ã€ADD_MONTHS() ˜q”回指定日期月䆾+n之åŽçš„å€û|¼Œnå¯ä»¥ä¸ÞZ“Q何整数ã€?
例如åQšSELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;
2ã€CURRENT_DATE ˜q”回当å‰session所在时区的默认旉™—´
例如åQ?
SQL> alter session set nls_date_format = 'mm-dd-yyyy' ;
SQL> select current_date from dual;
3�
SYSDATE
功能与上相åŒåQŒè¿”回当å‰session所在时区的默认旉™—´ã€‚ä½†æ˜¯éœ€è¦æ³¨æ„的一ç‚ÒŽ˜¯åQŒå¦‚æžœåŒæ—¶ä‹É用sysdate与current_date获得的时间ä¸ä¸€
定相åŒï¼ŒæŸäº›æƒ…况下current_date会比sysdate快一¿U’。绘q‡ä¸Žxyf_tck(å…„å°çš„大作ORACLE的工作机制写的很好,深入‹¹…出)çš?
çŸæš‚交æµåQŒæˆ‘们认为current_date是将current_timestamp䏿¯«¿U’å››èˆäº”å…¥åŽçš„返回,虽然没有扑ֈ°æ–‡æ¡£æ”¯æŒåQŒä½†æ˜¯æƒ³æ¥åº”该八ä¹ä¸
¼›Õdã€‚åŒæ—Óž¼Œä»…是æŸäº›æƒ…况下会有一¿U’的误差åQŒä¸€èˆ¬æƒ…况下òq¶ä¸ä¼šå¯¹ä½ çš„æ“ä½œé€ æˆå½±å“åQŒæ‰€ä»¥äº†è§£å³å¯ã€?
例如åQšSELECT SYSDATE,CURRENT_DATE FROM DUAL;
4ã€LAST_DAY(d) ˜q”回指定旉™—´æ‰€åœ¨æœˆçš„æœ€åŽä¸€å¤?
例如åQšSELECT last_day(SYSDATE) FROM DUAL;
5ã€NEXT_DAY(d,n) ˜q”回指定日期åŽç¬¬ä¸€ä¸ªn的日期,nä¸ÞZ¸€å‘¨ä¸çš„æŸä¸€å¤©ã€‚ä½†æ˜¯ï¼Œéœ€è¦æ³¨æ„的是n如果为嗽W¦çš„è¯ï¼Œå®ƒçš„æ˜ŸæœŸå½¢å¼éœ€è¦ä¸Žå½“å‰session默认时区ä¸çš„æ˜ŸæœŸå½¢å¼ç›¸åŒã€?
例如åQšä¸‰æ€ç”¨çš„䏿–‡ntåQŒnls_languageå€égØ“SIMPLIFIED CHINESE
SELECT NEXT_DAY(SYSDATE,5) FROM DUAL;
SELECT NEXT_DAY(SYSDATE,'星期�) FROM DUAL;
ä¸¤ç§æ–¹å¼éƒ½å¯ä»¥å–到棼‹®çš„˜q”回åQŒä½†æ˜¯ï¼š
SELECT NEXT_DAY(SYSDATE,'Thursday') FROM DUAL;
则会执行出错åQŒæä¾›ä½ 说周ä¸çš„æ—¥æ— 效,ž®±æ˜¯˜q™ä¸ªåŽŸå› äº†ã€?
6ã€MONTHS_BETWEEN(d1,d2) ˜q”回d1与d2间的月䆾差,视d1,d2的值大ž®ï¼Œ¾l“æžœå¯æ£å¯è´ŸåQŒå½“然也有å¯èƒ½äØ“0
例如åQ?
SELECT months_between(SYSDATE, sysdate),
months_between(SYSDATE, add_months(sysdate, -1)),
months_between(SYSDATE, add_months(sysdate, 1))
FROM DUAL;
7ã€ROUND(d[,fmt]) å‰é¢è®²æ•°å€¼åž‹å‡½æ•°çš„æ—¶å€™ä»‹¾l过ROUNDåQŒæ¤å¤„与上功能基本相ä¼û|¼Œä¸è¿‡æ¤å¤„æ“ä½œçš„æ˜¯æ—¥æœŸã€‚å¦‚æžœä¸æŒ‡å®šfmt傿•°åQŒåˆ™é»˜è®¤˜q”回è·ç¦»æŒ‡å®šæ—¥æœŸæœ€˜q‘的日期ã€?
例如åQšSELECT ROUND(SYSDATE,'HH24') FROM DUAL;
8ã€TRUNC(d[,fmt]) 与å‰é¢ä»‹¾l的数值型TRUNC原ç†ç›¸åŒåQŒä¸˜q‡æ¤å¤„也是æ“作的日期型ã€?
例如åQšSELECT TRUNC(SYSDATE,'HH24') FROM DUAL;
(äº?.转æ¢å‡½æ•°(Conversion Functions)
转æ¢å‡½æ•°ž®†æŒ‡å®šå—½W¦ä»Žä¸€¿U类型è{æ¢äØ“å¦ä¸€¿U,通常˜q™ç±»å‡½æ•°éµåó@如下惯例åQšå‡½æ•°å¿U°åŽé¢è·Ÿç€å¾…è{æ¢ç±»åž‹ä»¥åŠè¾“出类型ã€?
1ã€TO_CHAR() 本函数åˆå¯ä»¥åˆ†ä¸‰ž®ç±»åQŒåˆ†åˆ«æ˜¯
转æ¢å—符->å—符TO_CHAR(c)åQšå°†nchar,nvarchar2,clob,nclob¾cÕdž‹è½¬æ¢ä¸ºchar¾cÕdž‹åQ?
例如åQšSELECT TO_CHAR('AABBCC') FROM DUAL;
è½¬æ¢æ—‰™—´->å—符TO_CHAR(d[,fmt])åQšå°†æŒ‡å®šçš„æ—¶é—?data,timestamp,timestamp with time zone)æŒ‰ç…§æŒ‡å®šæ ¼å¼è½¬æ¢ä¸ºvarchar2¾cÕdž‹åQ?
例如åQšSELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
è½¬æ¢æ•°å€?>å—符TO_CHAR(n[,fmt])åQšå°†æŒ‡å®šæ•°å€¼næŒ‰ç…§æŒ‡å®šæ ¼å¼fmt转æ¢ä¸ºvarchar2¾cÕdž‹òq¶è¿”回;
例如åQšSELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL;
2�
TO_DATE(c[,fmt[,nls]])
ž®†char,nchar,varchar2,nvarchar2转æ¢ä¸ºæ—¥æœŸç±»åž‹ï¼Œå¦‚æžœfmt傿•°ä¸äØ“½Iºï¼Œåˆ™æŒ‰ç…§fmt䏿Œ‡å®šæ ¼å¼è¿›è¡Œè{æ¢ã€‚注æ„这里的
fmt傿•°ã€‚如果ftmä¸?J'则表½CºæŒ‰ç…§å…¬å…ƒåˆ¶(Julian day)转æ¢åQŒc则必™åÖMؓ大于0òq¶å°äº?373484çš„æ£æ•´æ•°ã€?
例如åQ?
SELECT TO_DATE(2454336, 'J') FROM DUAL;
SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
ä¸ÞZ»€ä¹ˆå…¬å…ƒåˆ¶çš„è¯åQŒc的值必™åÖM¸å¤§äºŽ5373484å‘¢ï¼Ÿå› äØ“Oracleçš„DATE¾cÕdž‹çš„å–倯DŒƒå›´æ˜¯å…¬å…ƒå‰?712òq?æœ?日至公元9999òq?2æœ?1日。看看下é¢è¿™ä¸ªè¯å¥ï¼š
SELECT TO_CHAR(TO_DATE('9999-12-31','yyyy-mm-dd'),'j') FROM DUAL;
3ã€TO_NUMBER(c[,fmt[,nls]]) ž®†char,nchar,varchar2,nvarchar2åž‹å—串按照fmt䏿Œ‡å®šæ ¼å¼è{æ¢äØ“æ•°å€¼ç±»åž‹åÆˆ˜q”回ã€?
例如åQšSELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL;
(�.其它辅助函数(Miscellaneous Single-Row Functions)
1ã€DECODE(exp,s1,r1,s2,r2..s,r[,def]) å¯ä»¥æŠŠå®ƒç†è§£æˆä¸€ä¸ªå¢žå¼ºåž‹çš„if elseåQŒåªä¸è¿‡å®ƒåƈä¸é€šè¿‡å¤šè¡Œè¯å¥åQŒè€Œæ˜¯åœ¨ä¸€ä¸ªå‡½æ•°å†…实现if else的功能ã€?
expåšäØ“åˆå§‹å‚数。såšäØ“å¯Òޝ”å€û|¼Œç›¸åŒåˆ™è¿”回råQŒå¦‚æžœs有多个,则挾lé历所有såQŒç›´åˆ°æŸä¸ªæ¡ä»¶äØ“çœŸäØ“æ¢ï¼Œå¦åˆ™˜q”回默认值def(如果指定了的è¯?åQŒå¦‚果没有默认å€û|¼Œòq¶ä¸”å‰é¢çš„å¯¹æ¯”ä¹Ÿéƒ½æ²¡æœ‰äØ“çœŸï¼Œåˆ™è¿”å›žç©ºã€?
æ¯«æ— ç–‘é—®åQŒdecode是个éžå¸¸é‡è¦çš„函敎ͼŒåœ¨å®žçŽ°è¡Œè½¬åˆ—½{‰åŠŸèƒ½æ—¶éƒ½ä¼šç”¨åˆ°åQŒéœ€è¦ç‰¢è®°å’Œç†Ÿç»ƒä½¿ç”¨ã€?
例如åQšselect decode('a2','a1','true1','a2','true2','default') from dual;
2ã€GREATEST(n1,n2,...n) ˜q”回åºåˆ—ä¸çš„æœ€å¤§å€?
例如åQšSELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;
3ã€LEAST(n1,n2....n) ˜q”回åºåˆ—ä¸çš„æœ€ž®å€?
例如åQšSELECT LEAST(15,5,75,8) LEAST FROM DUAL;
4ã€NULLIF(c1,c2)
Nullifä¹Ÿæ˜¯ä¸ªå¾ˆæœ‰æ„æ€çš„函数。逻辑½{‰äh于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END
例如åQšSELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;
5ã€NVL(c1,c2) 逻辑½{‰äh于IF c1 is null THEN c2 ELSE c1 END。c1,c2å¯ä»¥æ˜¯ä“Q何类型。如果两者类型ä¸åŒï¼Œåˆ™oracle会自动将c2转æ¢ä¸ºc1的类型ã€?
例如åQšSELECT NVL(null, '12') FROM DUAL;
6ã€NVL2(c1,c2,c3) 大家å¯èƒ½éƒ½ç”¨åˆ°nvlåQŒä½†ä½ 用˜q‡nvl2å—?如果c1éžç©ºåˆ™è¿”回c2,如果c1为空则返回c3
例如åQšselect nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;
7ã€SYS_CONNECT_BY_PATH(col,c) 该函数åªèƒ½åº”ç”¨äºŽæ ‘çŠ¶æŸ¥è¯¢ã€‚è¿”å›žé€šè¿‡c1˜qžæŽ¥çš„ä»Žæ ¹åˆ°èŠ‚ç‚¹çš„èµ\径。该函数必须与connect by åå¥å…±åŒä½¿ç”¨ã€?
例如åQ?
create table tmp3(
rootcol varchar2(10),
nodecol varchar2(10)
);
insert into tmp3 values ('','a001');
insert into tmp3 values ('','b001');
insert into tmp3 values ('a001','a002');
insert into tmp3 values ('a002','a004');
insert into tmp3 values ('a001','a003');
insert into tmp3 values ('a003','a005');
insert into tmp3 values ('a005','a008');
insert into tmp3 values ('b001','b003');
insert into tmp3 values ('b003','b005');
select lpad(' ', level*10,'=') ||'>'|| sys_connect_by_path(nodecol,'/')
from tmp3
start with rootcol = 'a001'
connect by prior nodecol =rootcol;
8ã€SYS_CONTEXT(c1,c2[,n]) ž®†æŒ‡å®šå‘½å空间c1çš„æŒ‡å®šå‚æ•°c2的值按照指定长度n截å–åŽè¿”回ã€?
Oracle9iæä¾›å†…置了一个命å空间USERENVåQŒæ˜qîCº†å½“å‰session的儙å¹ä¿¡æ¯ï¼Œå…¶æ‹¥æœ‰ä¸‹åˆ—傿•ŽÍ¼š
ï?CURRENT_SCHEMA:当剿¨¡å¼åï¼›
ï?CURRENT_USER:当å‰ç”¨æˆ·åQ?
ï?IP_ADDRESS:当å‰å®¢æˆ·ç«¯IP地å€åQ?
ï?OS_USER:当å‰å®¢æˆ·ç«?a title="æ“作¾pÈ»Ÿ" target="_blank" style="color: #000000;">æ“作¾pÈ»Ÿç”¨æˆ·åQ?
½{‰ç‰æ•°å™å¹ï¼Œæ›´è¯¦¾l†çš„傿•°åˆ—还请大家直接å‚考Oracle Online Documents
例如åQšSELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;
注:N表示数å—型,C表示å—符型,D表示日期型,[]表示内ä¸å‚æ•°å¯è¢«å¿½ç•¥åQŒfmtè¡¨ç¤ºæ ¼å¼ã€?
å•值函数在查询ä¸è¿”回å•个å€û|¼Œå¯è¢«åº”用到selectåQŒwhereåå¥åQŒstart with以åŠconnect by åå¥å’Œhavingåå¥ã€?
(一).数值型函数(Number Functions)
æ•?
值型函数输入数å—åž‹å‚æ•°åƈ˜q”回数值型的倹{€‚多数该¾cÕd‡½æ•°çš„˜q”回值支æŒ?8ä½å°æ•°ç‚¹åQŒè¯¸å¦‚:COS, COSH, EXP, LN, LOG, SIN,
SINH, SQRT, TAN, and TANH 支æŒ36ä½å°æ•°ç‚¹ã€‚ACOS, ASIN, ATAN, and ATAN2支æŒ30ä½å°æ•°ç‚¹ã€?
1ã€ABS(n) ˜q”回数å—çš„ç»å¯¹å€?
例如åQšSELECT ABS(-1000000.01) FROM DUAL;
2ã€COS(n) ˜q”回n的余弦å€?
例如åQšSELECT COS(-2) FROM DUAL;
3ã€ACOS(n) å余弦函敎ͼŒn between -1 and 1åQŒè¿”回值between 0 and piã€?
例如åQšSELECT ACOS(0.9) FROM DUAL;
4ã€BITAND(n1,n2) ä½ä¸Ž˜qç®—åQŒè¿™ä¸ªå¤ªæœ‰æ„æ€äº†åQŒè™½ç„¶æ²¡æƒ›_ˆ°å¯èƒ½ç”¨åˆ°å“ªé‡ŒåQŒè¯¦¾l†è¯´æ˜Žä¸€ä¸‹ï¼š
å‡è®¾3,9åšä½ä¸Žè¿½Ž—,3的二˜q›åˆ¶å½¢å¼ä¸ºï¼š0011åQ?的二˜q›åˆ¶å½¢å¼ä¸ºï¼š1001åQŒåˆ™¾l“æžœæ˜?001åQŒè{æ¢æˆ10˜q›åˆ¶æ•îCØ“1ã€?
例如åQšSELECT BITAND(3,9) FROM DUAL;
5ã€CEIL(n) ˜q”回大于或ç‰äºŽn的最ž®çš„æ•´æ•°å€?
例如åQšSELECT ceil(18.2) FROM DUAL;
è€ƒä½ ä¸€ä¸‹ï¼ŒçŒœçŒœceil(-18.2)çš„å€ég¼šæ˜¯ä»€ä¹ˆå‘¢
6ã€FLOOR(n) ˜q”回ž®äºŽ½{‰äºŽn的最大整数å€?
例如åQšSELECT FLOOR(2.2) FROM DUAL;
å†çŒœçŒœfloor(-2.2)çš„å€ég¼šæ˜¯ä»€ä¹ˆå‘¢
7ã€BIN_TO_NUM(n1,n2,....n) 二进制è{å‘å˜q›åˆ¶
例如åQšSELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL;
8ã€SIN(n) ˜q”回nçš„æ£çŽ„å€?n为弧度ã€?
例如åQšSELECT SIN(10) FROM DUAL;
9ã€SINH(n) ˜q”回nçš„åŒæ›²æ£çŽ„å€?n为弧度ã€?
例如åQšSELECT SINH(10) FROM DUAL;
10ã€ASIN(n) åæ£çŽ„å‡½æ•ŽÍ¼Œn between -1 and 1åQŒè¿”回值between pi/2 and -pi/2ã€?
例如åQšSELECT ASIN(0.8) FROM DUAL;
11ã€TAN(n) ˜q”回nçš„æ£åˆ‡å€?n为弧åº?
例如åQšSELECT TAN(0.8) FROM DUAL;
12ã€TANH(n) ˜q”回nçš„åŒæ›²æ£åˆ‡å€?n为弧åº?
例如åQšSELECT TANH(0.8) FROM DUAL;
13ã€ATAN(n) åæ£åˆ‡å‡½æ•ŽÍ¼Œn表示弧度åQŒè¿”回值between pi/2 and -pi/2ã€?
例如åQšSELECT ATAN(-444444.9999999) FROM DUAL;
14ã€EXP(n) ˜q”回eçš„n‹Æ¡å¹‚åQŒe = 2.71828183 ...
例如åQšSELECT EXP(3) FROM DUAL;
15ã€LN(n) ˜q”回n的自然对敎ͼŒn>0
例如åQšSELECT LN(0.9) FROM DUAL;
16ã€LOG(n1,n2) ˜q”回以n1为底n2的对敎ͼŒn1 >0 and not 1 åQŒn2>0
例如åQšSELECT LOG(1.1,2.2) FROM DUAL;
17ã€POWER(n1,n2) ˜q”回n1çš„n2‹Æ¡æ–¹ã€‚n1,n2å¯ä»¥ä¸ÞZ“Qæ„æ•°å€û|¼Œä¸è¿‡å¦‚æžœm是负敎ͼŒåˆ™n必须为整æ•?
例如åQšSELECT POWER(2.2,2.2) FROM DUAL;
18ã€SIGN(n) 如果n<0˜q”回-1,如果n>0˜q”回1åQŒå¦‚æžœn=0˜q”回0.
例如åQšSELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL;
19ã€SQRT(n) ˜q”回nçš„åã^æ–ÒŽ ¹,n为弧度。n>=0
例如åQšSELECT SQRT(0.1) FROM DUAL;
(äº?.å—符型函数返回嗽W¦å€?Character Functions Returning Character Values)
该类函数˜q”回与输入类型相åŒçš„¾cÕdž‹ã€?
ï?˜q”回的CHAR¾cÕdž‹å€¼é•¿åº¦ä¸‘…过2000å—节åQ?
ï?˜q”回的VCHAR2¾cÕdž‹å€¼é•¿åº¦ä¸‘…过4000å—节åQ?
如果上述应返回的å—符长度‘…出åQŒoracleòq¶ä¸ä¼šæŠ¥é”™è€Œæ˜¯ç›´æŽ¥æˆªæ–è‡Ïxœ€å¤§å¯æ”¯æŒé•¿åº¦˜q”回ã€?
ï?˜q”回的CLOB¾cÕdž‹å€¼é•¿åº¦ä¸‘…过4GåQ?
对于CLOB¾cÕdž‹çš„函敎ͼŒå¦‚æžœ˜q”回值长度超出,oracleä¸ä¼š˜q”回ä»ÖM½•错误而是直接抛出错误ã€?
1ã€CHR(N[ USING NCHAR_CS]) ˜q”回指定数值在当å‰å—符集ä¸å¯¹åº”的嗽W?
例如åQšSELECT CHR(95) FROM DUAL;
2ã€CONCAT(c1,c2) ˜qžæŽ¥å—符ä¸ÔŒ¼Œ½{‰åŒäºŽ||
例如åQšSELECT concat('aa','bb') FROM DUAL;
3ã€INITCAP(c) ž®†å—½W¦ä¸²ä¸å•è¯çš„½W¬ä¸€ä¸ªå—æ¯è{æ¢äؓ大写åQŒå…¶å®ƒåˆ™è½¬æ¢ä¸ºå°å†?
例如åQšSELECT INITCAP('whaT is this') FROM DUAL;
4ã€NLS_INITCAP(c) ˜q”回指定å—符ä¸ÔŒ¼Œòq¶å°†å—符串丽W¬ä¸€ä¸ªå—æ¯å˜å¤§å†™åQŒå…¶å®ƒå—æ¯å˜ž®å†™
例如åQšSELECT NLS_INITCAP('ä¸åŽmiNZHu') FROM DUAL;
它还å…ähœ‰ä¸€ä¸ªå‚敎ͼšNlsparamç”¨æ¥æŒ‡å®šæŽ’åºè§„则åQŒå¯ä»¥å¿½ç•¥ï¼Œé»˜è®¤çжæ€è¯¥å‚数为当å‰session的排åºè§„则ã€?
(ä¸?.å—符型函数返回数å—å€?Character Functions Returning Number Values)
æœ¬ç±»å‡½æ•°æ”¯æŒæ‰€æœ‰çš„æ•°æ®¾cÕdž‹
1ã€ASCII(c) 与chr函数的用途刚刚相å,本函数返回指定嗽W¦åœ¨å½“å‰å—符集下对应的数倹{€?
例如åQšSELECT ASCII('_') FROM DUAL;
(�.日期函数(Datetime Functions)
本类函数ä¸ï¼Œé™¤months_between˜q”回数值外åQŒå…¶å®ƒéƒ½ž®†è¿”回日期ã€?
1ã€CURRENT_TIMESTAMP([n]) ˜q”回当å‰session所在时区的日期和时间。n表示毫秒¾U§çš„¾_‘Öº¦åQŒä¸å¤§äºŽ6
例如åQšSELECT CURRENT_TIMESTAMP(3) FROM DUAL;
2ã€LOCALTIMESTAMP([n]) 与上åŒï¼Œ˜q”回当å‰session所在时区的日期和时间。n表示毫秒¾U§çš„¾_‘Öº¦åQŒä¸å¤§äºŽ6
例如åQšSELECT LOCALTIMESTAMP(3) FROM DUAL;
3ã€SYSTIMESTAMP([n]) 与上åŒï¼Œ˜q”å›žå½“å‰æ•°æ®åº“所在时区的日期和时é—ß_¼Œn表示毫秒¾U§çš„¾_‘Öº¦åQ?gt;0 and <6
例如åQšSELECT SYSTIMESTAMP(4) FROM DUAL;
4ã€DBTIMEZONE ˜q”回数æ®åº“çš„å½“å‰æ—¶åŒº
例如åQšSELECT DBTIMEZONE FROM DUAL;
5ã€SESSIONTIMEZONE ˜q”回当å‰session所在时åŒ?
例如åQšSELECT SESSIONTIMEZONE FROM DUAL;
6ã€EXTRACT(key from date) key=(year,month,day,hour,minute,second) 从指定时间æåˆ°æŒ‡å®šæ—¥æœŸåˆ—
例如åQšSELECT EXTRACT(year from sysdate) FROM DUAL;
7ã€TO_TIMESTAMP(c1[,fmt]) ž®†æŒ‡å®šå—½W¦æŒ‰æŒ‡å®šæ ¼å¼è½¬æ¢ä¸ºtimestampæ ¼å¼ã€?
例如åQšSELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
(äº?.转æ¢å‡½æ•°(Conversion Functions)
转æ¢å‡½æ•°ž®†æŒ‡å®šå—½W¦ä»Žä¸€¿U类型è{æ¢äØ“å¦ä¸€¿U,通常˜q™ç±»å‡½æ•°éµåó@如下惯例åQšå‡½æ•°å¿U°åŽé¢è·Ÿç€å¾…è{æ¢ç±»åž‹ä»¥åŠè¾“出类型ã€?
1ã€BIN_TO_NUM(n1,n2...n) ž®†ä¸€¾l„ä½å‘é‡è½¬æ¢ä¸ºç‰ä»ïLš„å进制åÅžå¼ã€?
例如åQšSELECT BIN_TO_NUM(1,1,0) FROM DUAL;
2ã€CAST(c as newtype) ž®†æŒ‡å®šå—串è{æ¢äؓ指定¾cÕdž‹åQŒåŸºæœ¬åªå¯¹å—½W¦ç±»åž‹æœ‰æ•ˆï¼Œæ¯”如char,number,date,rowid½{‰ã€‚椾c»è{æ¢æœ‰ä¸€ä¸ªä¸“门的表列明了哪秾cÕdž‹å¯ä»¥è½¬æ¢ä¸ºå“ª¿U类型,æ¤å¤„ž®×ƒ¸ä½œé…¹˜q°ã€?
例如åQšSELECT CAST('1101' AS NUMBER(5)) FROM DUAL;
3ã€CHARTOROWID(c) ž®†å—½W¦ä¸²è½¬æ¢ä¸ºrowid¾cÕdž‹
例如åQšSELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;
4ã€ROWIDTOCHAR(rowid) 转æ¢rowidå€égØ“varchar2¾cÕdž‹ã€‚返回串长度ä¸?8个å—节ã€?
例如åQšSELECT ROWIDTOCHAR(rowid) FROM DUAL;
5ã€TO_MULTI_BYTE(c) ž®†æŒ‡å®šå—½W¦è{æ¢äؓ全角òq¶è¿”回char¾cÕdž‹å—串
例如åQšSELECT TO_MULTI_BYTE('ABC abc ä¸åŽ') FROM DUAL;
6ã€TO_SINGLE_BYTE(c) ž®†æŒ‡å®šå—½W¦è{æ¢äØ“åŠè§’òq¶è¿”回char¾cÕdž‹å—串
例如åQšSELECT TO_SINGLE_BYTE('åQ¡ïð‡åQ£ã€€ï½ï½‚cä¸å?) FROM DUAL;
(�.其它辅助函数(Miscellaneous Single-Row Functions)
1ã€COALESCE(n1,n2,....n) ˜q”回åºåˆ—ä¸çš„½W¬ä¸€ä¸ªéž½Iºå€?
例如åQšSELECT COALESCE(null,5,6,null,9) FROM DUAL;
2ã€DUMP(exp[,fmt[,start[,length]]])
dump是个功能éžå¸¸å¼ºæ‚的函敎ͼŒå¯¹äºŽæ·±å…¥äº†è§£oracleå˜å‚¨çš„ähè€Œè¨€ç›¸å½“æœ‰ç”¨ã€‚æ‰€ä»¥å¯¹äºŽæˆ‘ä»¬è¿™äº›ä»…ä»…åªæ˜¯åº”ç”¨çš„äºø™€Œè¨€ž®×ƒ¸çŸ¥é“能将其应用于何处了。æ¤å¤„仅介ç»ç”¨æ³•åQŒä¸å¯¹å…¶åŠŸèƒ½åšæ·±å…¥åˆ†æžã€?br />
如上所½Cºï¼Œdump拥有ä¸å°‘傿•°ã€‚å…¶æœ¬è´¨æ˜¯ä»¥æŒ‡å®šæ ¼å¼åQŒè¿”回指定长度的exp的内部表½CºåÅžå¼çš„varchar2倹{€‚fmtå?¿Uæ ¼
å¼ï¼š8||10||16||17åQŒåˆ†åˆ«è¡¨½C?˜q›åˆ¶åQ?0˜q›åˆ¶åQ?6˜q›åˆ¶å’Œå•å—符åQŒé»˜è®¤äØ“10˜q›åˆ¶ã€‚start傿•°è¡¨ç¤ºå¼€å§‹ä½¾|®ï¼Œlength表示ä»?分隔
çš„å—串数ã€?
例如åQšSELECT DUMP('abcdefg',17,2,4) FROM DUAL;
3ã€EMPTY_BLOB,EMPTY_CLOB ˜q™ä¸¤ä¸ªå‡½æ•°éƒ½æ˜¯è¿”回空lob¾cÕdž‹åQŒé€šå¸¸è¢«ç”¨äºŽinsertå’Œupdate½{‰è¯å¥ä»¥åˆå§‹åŒ–lob列,或者将其置为空。EMPTY表示LOBå·²ç»è¢«åˆå§‹åŒ–åQŒåªä¸è¿‡˜q˜æ²¡æœ‰ç”¨æ¥å˜å‚¨æ•°æ®ã€?
4ã€NLS_CHARSET_NAME(n) ˜q”回指定数值对应的å—符集å¿U°ã€?
例如åQšSELECT NLS_CHARSET_NAME(1) FROM DUAL;
5ã€NLS_CHARSET_ID(c) ˜q”回指定å—符对应的嗽W¦é›†idã€?
例如åQšSELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL;
6ã€NLS_CHARSET_DECL_LEN(n1,n2) ˜q”回一个NCHAR值的声明宽度(以嗽W¦äØ“å•ä½).n1是该å€ég»¥å—节为å•ä½çš„长度åQŒn2是该值的å—符集ID
例如åQšSELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL;
7ã€SYS_EXTRACT_UTC(timestamp) ˜q”å›žæ ‡å‡†é€šç”¨æ—‰™—´åÏx ¼æž—卿²ÀL—¶é—´ã€?
例如åQšSELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL;
8ã€SYS_TYPEID(object_type) ˜q”回对象¾cÕdž‹å¯¹åº”çš„idã€?
例如åQšè¿™ä¸ªè¿™ä¸ªï¼Œæ²¡æœ‰å»ºç«‹˜q‡è‡ªå®šä¹‰å¯¹è±¡åQŒå’‹åšç¤ºä¾‹ï¼Ÿ
9ã€UID ˜q”å›žä¸€ä¸ªå”¯ä¸€æ ‡è¯†å½“å‰æ•°æ®åº“用æˆïLš„æ•´æ•°ã€?
例如åQšSELECT UID FROM DUAL;
10ã€USER ˜q”回当å‰session用户
例如åQšSELECT USER FROM DUAL;
11ã€USERENV(c) 该函数用æ¥è¿”回当å‰session的信æ¯ï¼Œæ®oracle文档的说明,userenvæ˜¯äØ“äº†ä¿æŒå‘下兼容的é—留函数。oracle公叿ލèä½ ä‹É用sys_context函数调用USERENV命å½Iºé—´æ¥èŽ·å–相关信æ¯ï¼Œæ‰€ä»¥å¤§å®¶äº†è§£ä¸‹ž®Þp¡Œäº†ã€?
例如åQšSELECT USERENV('LANGUAGE') FROM DUAL;
12ã€VSIZE(c) ˜q”回cçš„å—节数ã€?
例如åQšSELECT VSIZE('abcä¸åŽ') FROM DUAL;
利用Eclipseè‡ªåŠ¨ç”Ÿæˆæœºåˆ¶åQŒå¾ˆå¿«å°±å®Œæˆäº†æ˜ ž®„文件ç‰çš„生æˆï¼Œ‹¹‹è¯•一下,å´å‘觉出现错è¯?br />
éƒé—·äº†å¾ˆé•¿æ—¶é—ß_¼Œå¼€å§‹ä»¥ä¸ºæ˜¯ä¸»é”®¾cÕd¤å†™çš„hash¾cÕd’Œequals¾cÀLœ‰é”™è¯¯åQŒäºŽæ˜¯ä‹Éç”?/span>org.apache.commons.langä¸çš„对应æ–ÒŽ³•é‡å†™åQŒå¯˜q˜æ˜¯ä¸è¡Œã€‚端详了很长旉™—´åQŒæ¯ä¸€¿Uå¯èƒ½çš„错误都考虑了,感觉没啥错误了呀åQ?/span>
åˆçœ‹äº†ä¸€é错误的代ç åQŒå‘觉已¾l生æˆäº†HQLè¯å¥åQŒè€Œä¸”错误代ç å‡ ä¹Žå…¨æ˜¯æ•°æ®åº“的问题。数æ®åº“的驱动包我已¾låŠ ˜q›æ¥äº†ï¼Œè€Œä¸”在其他的例åä¸è¿è¡Œå¾ˆæ£å¸¸å‘€åQèŽ«éžæ˜¯æäº¤è¯å¥çš„错误,看了一下看ä¸å‡ºä»€ä¹ˆæ¥åQŒèŽ«éžæ˜¯æ•°æ®åº“的问题åQŸåŽ»æŸ¥çœ‹è¡¨ï¼Œå‘觉有点怪怪的åQ?/span>
˜q™ä¸ªdesc怎么æˆä»‹ä¸ªæ ·å了åQŒèŽ«éžè®¾¾|®æˆå¤åˆä¸»é”®ä¹‹åŽž®±æˆäº†è¿™ä¸ªæ ·åï¼ŒåŠ è¿›ä¸€ä¸ªæ–°çš„å—ŒD‰|²¡æœ‰å‘€ã€‚嘿嘿,那我ž®±åˆ 了这个嗌Dµï¼Œåœ¨é‡æ–°åŠ ˜q›æ¥ã€‚结果还是ä¸è¡Œï¼
˜q™æ—¶æˆ‘åˆè°ƒæ•´äº†æ€èµ\åQŒæŠŠç”Ÿæˆçš?/span>SQLè¯å¥å¤åˆ¶åˆ°æŸ¥è¯¢åˆ†æžå™¨ä¸æ‰§è¡Œï¼Œ˜q˜æ˜¯æ˜„¡¤º“åœ¨å…³é”®å— 'desc' é™„è¿‘æœ‰è¯æ³•é”™è¯?/span>”åQŒæˆ‘晕ï¼çœ‹æ¥ž®±æ˜¯æ•°æ®åº“的问题了。牽{‰ï¼Œæˆ‘çªç„¶æ„识到什么了åQ?/span>
关键å—?
desc?
莫éžåQŸä¸æ˜¯èŽ«éžï¼Œž®±æ˜¯˜q™æ ·å‘€åQŒæˆ‘怎么忘得一òq²äºŒå‡€äº†ï¼Œdesc˜q™ä¹ˆå¥½çš„è¯æ±‡æ—©å°±è¢«å‰è¾ˆä»¬å®šä¹‰æˆå…³é”®å—了,怎么会留¾l™æˆ‘æ¥ä‹É用呢åQ?/span>
æ”ÒŽŽ‰descåQŒä¸€åˆ‡é—®é¢˜å…¨éƒ¨è§£å†³äº†åQŒæ•°æ®æˆåŠŸçš„æ’入到数æ®åº“之ä¸åQ?/span>
å”‰ï¼Œæƒæ„§å‘€ï½?/span>
打开MyeclipseåQŒæ·»åР坹Spring的支æŒï¼ˆä¹Ÿä¸çŸ¥é“˜q™ä¹ˆé€‰è¡Œä¸è¡ŒåQŒæ±—~)
æŽ¥ä¸‹æ¥æŒ‰ç…§é»˜è®¤è®¾¾|®ç›´æŽ¥ç‚¹å‡?/span>NextåQŒæœ€åŽç‚¹å®Œæˆå›_¯ã€‚项目ä¸ç”Ÿæˆäº†ä¼ 说ä¸åŠŸèƒ½å¼ºå¤§çš?/span>Springé…置文äšgapplicationContext.xmlåQŒå“ˆå“ˆï¼Œäº²ä¸€ä¸ªï¼
环境讄¡½®å¥½äº†åQŒæŽ¥ä¸‹æ¥è¯¥ç¼–写类文äšg了。先生æˆä¸€ä¸?/span>Fruit接å£åQ?br />
接瀾~–å†™å®žçŽ°æ¤æŽ¥å£çš„¾cÀL–‡ä»Óž¼š
æŽ¥å£æ–‡äšg写好了,现在è¦å†™‹¹‹è¯•¾cÕd’Œé…ç½®Springæ–‡äšg了ã€?/span>
讄¡½®applicationContext.xmlé…置文äšg如下åQ?/span>
¾~–写一个测试类文äšgåQ?/span>
现在å¯ä»¥å¼€å§‹æµ‹è¯•效果了åQŒè¿è¡Œæµ‹è¯•ç±»åQŒåœ¨æŽ§åˆ¶å°è¾“出:
我è¦åƒè‹¹æžœäº†ï½žï½žï½?/span> log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.xml.XmlBeanDefinitionReader). log4j:WARN Please initialize the log4j system properly. |
大功告æˆåQŒä¸‹é¢çº¢å—æ½Cºæ˜¯å› äØ“æ²¡æœ‰è®„¡½®æ—¥å¿—ã€‚è¿™æ øP¼Œåœ¨è‹¹æžœæ¶¨ä»·ä¹‹åŽï¼Œæˆ‘们ž®±å¯ä»¥æ–¹ä¾¿çš„修改‹¹‹è¯•æ–‡äšgåQŒæ¢æˆå…¶ä»–的水果åQŒç…§åƒä¸è¯¯äº†ï½?/span>
ä¸è¿‡è¯åˆè¯´å›žæ¥äº†åQŒæ¢å½’æ¢åQŒåƒå…¶ä»–çš„ä¸œè¥¿å¯æ˜¯åƒä¸å‡ºè‹ÒŽžœçš„味é“å‘€
¾lˆäºŽ½{‰åˆ°ä¸åˆåQŒä¸Š¾|‘去查资料。得解:
1ã€åœ¨oracle 首先创å¾sequence
2.åœ¨ä½ çš?span lang="EN-US">hbm.xmlä¸çš„é…ç½®
˜q™æ ·å†æ’入数æ®çš„æ—¶å€™ï¼ŒHibernate回自动生æˆå¦‚下è¯å¥ï¼š
自动生æˆä¸‹ä¸€ä¸ªåºåˆ—å€û|¼Œç„¶åŽž®†å¯¹è±¡æ’入表ä¸ã€?br />
˜q™æ ·é—®é¢˜å¾—è§£åQ?br />
PSåQ?br />
sequencež®±æ˜¯é‡‡ç”¨æ•°æ®åº“æä¾›çš„sequence机制生æˆä¸»é”®ã€‚如oralceä¸çš„Sequence
nativež®±æ˜¯ç”?/span>hibernateæ ÒŽ®æ•°æ®åº“çš„DialectåQŒè‡ªåЍ采ç”?/span>identityåQ?/span>hiloåQ?/span>sequence的其ä¸ä¸€¿U作ä¸ÞZ¸»é”®ç”Ÿæˆæ–¹å¼?/span>
1ã€æ€È»“自己一天ä“QåŠ¡çš„å®Œæˆæƒ…况
æœ€å¥½çš„æ–¹å¼æ˜¯å†™å·¥ä½œæ—¥å¿—åQŒæŠŠè‡ªå·±ä»Šå¤©å®Œæˆäº†ä»€ä¹ˆäº‹æƒ…,é‡è§äº†ä»€ä¹ˆé—®é¢˜éƒ½è®°å½•下æ¥åQŒæ—¥åŽç¿»çœ‹å¥½å¤„多å¤?/span>
2ã€è€ƒè™‘自己明天应该åšçš„主è¦å·¥ä½œ
把明天è¦åšçš„事情列出æ¥ï¼Œòq¶æŒ‰ç…§ä¼˜å…ˆçñ”排列åQŒç¬¬äºŒå¤©åº”该把自己效率最高的旉™—´åˆ†é…¾l™æœ€é‡è¦çš„å·¥ä½?/span>
3ã€è€ƒè™‘自己一天工作ä¸å¤Þp¯¯çš„地方,òq¶æƒ³å‡ºé¿å…下一‹Æ¡å†çŠ¯çš„æ–ÒŽ³•
出错ä¸è¦ç´§ï¼Œæœ€é‡è¦çš„æ˜¯ä¸è¦é‡å¤çŠ¯ç›¸åŒçš„错误åQŒé‚£æ˜¯æ„šè ?/span>
4ã€è€ƒè™‘自己一天工作完æˆçš„è´¨é‡å’Œæ•ˆçŽ‡èƒ½å¦è¿˜èƒ½æé«?/span>
ä¸€å¤©åªæé«˜1%åQ?/span>365å¤©ä½ çš„æ•ˆçŽ‡å°±èƒ½æé«˜å¤šž®‘å€ä½ 知é“å—? (1+0.01)^365 = 37 å€?/span>
5ã€çœ‹ä¸€ä¸ªæœ‰ç”¨çš„æ–°é—»¾|‘ç«™æˆ–è¯»ä¸€å¼ æœ‰ç”¨çš„æŠ¥çº¸åQŒäº†è§£ä¸šç•ŒåЍæ€?/span>
é—é—¨é€ èžR是ä¸è¡Œçš„åQŒäº†è§£ä¸€ä¸‹åˆ«äººéƒ½åœ¨åšä»€ä¹ˆï¼Œå¯¹è‡ªå·Þpƒ½å¸¦æ¥å¾ˆå¤šå¯ç¤º
6ã€è®°ä½ä¸€ä½åŒäº‹çš„åå—åŠå…¶ç‰¹ç‚¹
ä½ è®¤è¯†å…¬å¸çš„æ‰€æœ‰åŒäº‹å—åQŸä½ 了解他们å—?
7ã€æ¸…ç†è‡ªå·Þqš„代ç
今天完æˆçš„代ç ,把ä¸é—´çš„调试信æ¯åQŒæµ‹è¯•ä»£ç æ¸…ç†æŽ‰åQŒæŒ‰ç…§ç¼–ç é£Žæ ¼æ•´ç†å¥½åQŒæ³¨é‡Šéƒ½å†™å¥½äº†å—åQ?/span>
8ã€æ¸…ç†è‡ªå·Þqš„æ¡Œé¢
当日事当日毕åQŒä¿æŒæ¸…‹zå¹²åŠ²çš„æ¡Œé¢æ‰èƒ½è®©ä½ 工作时ä¸åˆ†å¿ƒåQŒç¨‹åºå‘˜ç‰¹åˆ«è¦æŠŠç”µè„‘çš„æ¡Œé¢æ¸…ç†å¹²å‡€
½E‹åºå‘˜æ¯æœˆè¯¥åšçš„äº?/font>
1ã€è‡³ž®‘和一个åŒäº‹ä¸€èµ·åƒé¥æˆ–å–茶
ä¸å…‰äº†è§£è‡ªå·±å·¥ä½œä¼™ä¼´çš„工作,˜q˜è¦äº†è§£ä»–们的生‹z?/span>
2ã€è‡ªæˆ‘è€ƒæ ¸ä¸€‹Æ?/span>
相对æ£å¼åœ°è€ƒæ ¸è‡ªå·±ä¸€ä¸‹ï¼Œä½ 对得è“v˜q™ä¸ªæœˆçš„工资å—?
3ã€å¯¹ä½ çš„åŒäº‹è€ƒæ ¸ä¸€‹Æ?/span>
ä½ çš„åŒäº‹è¡¨çŽ°æ€Žä¹ˆæ øP¼Ÿå“ªäº›äººå€¼å¾—å¦ä¹ åQŒå“ªäº›äh需è¦å¸®åŠ©ï¼Ÿ
3ã€åˆ¶å®šä¸‹æœˆçš„计划åQŒç¡®å®šä¸‹æœˆçš„工作é‡ç‚¹
4ã€æ€È»“è‡ªå·±å·¥ä½œè´¨é‡æ”¹è¿›çж况
è‡ªå·±çš„è´¨é‡æé«˜äº†å¤šå°‘åQ?/span>
5ã€æœ‰é’ˆå¯¹æ€§åœ°å¯¹ä¸€™å¹å·¥ä½œæŒ‡æ ‡åšæ·±å…¥åœ°åˆ†æžåƈ得出改进的方æ¡?/span>
å¯ä»¥æ˜¯å¯¹è‡ªå·±çš„,也å¯ä»¥æ˜¯å¯¹å…¬å¸çš„åQŒä¸€å®šè¦æ·±å…¥åœ°åˆ†æžåŽæ‹¿å‡ºè‡ªå·±çš„è§‚ç‚ÒŽ¥ã€‚è¦æƒ›_œ¨è€æ¿é¢å‰è¯´å¾—上è¯åQŒåšçš„æˆäº‹ï¼Œå·¥ä½œä¸ŠåŠŸå¤«è¦åšèƒöã€?/span>
6ã€ä¸Žè€æ¿æ²Ÿé€šä¸€‹Æ?/span>
最好是é¢å¯¹é¢åœ°æ²Ÿé€šï¼Œå¥½å¥½è¡¨çŽ°ä¸€ä¸‹è‡ªå·±ï¼Œè™šå¿ƒå¬å–è€æ¿çš„æ„è§ï¼Œæ›´é‡è¦çš„æ˜¯è¦äº†è§£è€æ¿å½“å‰å…›_¿ƒçš„é‡ç‚?br />
½E‹åºå‘˜æ¯òq´è¯¥åšçš„äº?/font>
1ã€å¹´¾lˆæ€È»“
æ¯ä¸ªå…¬å¸éƒ½ä¼šåšçš„事情åQŒä½†ä½ 真æ£è®¤çœŸåœ°æ€È»“˜q‡è‡ªå·±å—åQ?/span>
2ã€å…‘现给自己ã€ç»™å®¶äh的承è¯?/span>
¾l™è€å©†ã€å„¿å的新年½C¼ç‰©ä¹îCº†æ²¡æœ‰åQŸç»™è‡ªå·±çš„å‘¢åQ?/span>
3ã€ä¸‹òq´åº¦å·¥ä½œè§„划
好好æƒÏxƒ³è‡ªå·±æ˜Žå¹´çš„å‘å±•ç›®æ ‡ï¼Œäº‰å–å‡èŒ/åŠ è–ªã€èŸ©æ§½è¿˜æ˜¯è‡ªå·±å‡ºæ¥å¹²åQ?/span>
4ã€æŽŒæ¡ä¸€™åÒŽ–°æŠ€æœ?/span>
臛_°‘是一™å¹ï¼Œä½œäØ“½E‹åºå‘˜ä¸€òq´è¦æ˜¯ä¸€™åÒŽ–°æŠ€æœ¯éƒ½å¦ä¸åˆ°æ‰‹åQŒé‚£ž®×ƒ¸€å®šä¼šè¢«æ·˜æ±°ã€?/span>
掌æ¡å¯ä¸æ˜¯çœ‹æœ¬ä¹¦ž®Þp¡Œçš„,è¦çœŸæ£æ‡‚å¾—åº”ç”¨ï¼Œæœ€å¥½ä½ èƒ½å¤Ÿå†™ä¸€½‹‡æ•™½E‹å‘è¡¨åˆ°ä½ çš„blog
5ã€æŽ¨å‡ÞZ¸€¿U新产å“
å¯ä»¥æ˜¯ä¸€ä¸ªçœŸæ£çš„产å“åQŒä¹Ÿå¯ä»¥åªæ˜¯ä¸€ä¸ªç±»åº“,åªè¦æ˜¯ä½ åˆ›é€ çš„ä¸œè¥¿ž®Þp¡ŒåQŒè®©åˆ«ähä½¿ç”¨å®ƒï¼Œä¹ŸäØ“ä¸–ç•Œä½œç‚¹è´¡çŒ®ã€‚å½“ç„¶å¦‚æžœçœŸçš„å¾ˆæœ‰ähå€û|¼Œæ”¶ç‚¹æ³¨å†Œè´¹ä¹Ÿæ˜¯åº”该的
6ã€ä¸Žçˆ¶æ¯å›¢èšä¸€‹Æ?/span>
常回家看看,常回家看�/span>