Oracle基础函数

假装没事ソ 提交于 2020-03-19 05:55:09
[sql] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. --1,大小写控制函数  
  2. SELECT LOWER('Hello World') 转小写,  
  3. UPPER('Hello World') 转大写,  
  4. INITCAP('hello world') 首字母大写  
  5. FROM DUAL;  
  6.   
  7. --2,字符控制函数  
  8. SELECT CONCAT('Hello','World') 字符连接  
  9. FROM DUAL;  
  10.   
  11. --3,求字母串中的某个子串  
  12. SELECT SUBSTR('Hello World',3) FROM DUAL;  
  13. --截取从第3个字符到末尾  
  14. SELECT SUBSTR('Hello World',3,4) FROM DUAL;  
  15. --截取从第3个字符连续4个字符  
  16.   
  17. --4,字符数和字节数  
  18. SELECT LENGTH('China') 字符数,   
  19. LENGTHB('China') 字节数  
  20. FROM DUAL;   
  21.   
  22. --5,在母串中,查找子串的位置  
  23. SELECT INSTR('Hello World','ll')  
  24. FROM DUAL;  
  25.   
  26. --6,左右填充,将abcd用*填充到10位  
  27. SELECT LPAD('abcd',10,'*') 左填充,  
  28. RPAD('abcd',10,'*') 右填充  
  29. FROM DUAL;  
  30.   
  31. --7,去掉字符串前后指定的字符  
  32. SELECT TRIM('H' FROM 'Hello WorldH')  
  33. FROM DUAL;  
  34.   
  35. --8,字符串替换函数  
  36. SELECT REPLACE('Hello World','l','*')  
  37. FROM DUAL;  
  38.   
  39. --9,数字函数  
  40. SELECT ROUND(45.926,2) 四舍五入,  
  41. TRUNC(45.926,2) 截断,  
  42. MOD(1600,300) 求余  
  43. FROM DUAL;  
  44.   
  45. --10,ROUND函数  
  46. SELECT ROUND(45.923,0) 整数位,  
  47. ROUND(45.923,-1) 十位,  
  48. ROUND(45.923,-2) 百位  
  49. FROM DUAL;  
  50.   
  51. --11,显示当前日期  
  52. SELECT SYSDATE  
  53. FROM DUAL;  
  54.   
  55. --12,指定格式显示时间  
  56. SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')  
  57. FROM DUAL;  
  58.   
  59. --13,显示昨天,今天和明天,加减数字  
  60. SELECT SYSDATE - 1 昨天,  
  61. SYSDATE 今天,  
  62. SYSDATE + 1 明天  
  63. FROM DUAL;  
  64.   
  65. --14,两个日期相减,结果为相差的天数,查询员工  
  66. --信息,显示员工工龄,两个日期不能相加  
  67. SELECT EMPNO,ENAME,SYSDATE - HIREDATE 天  
  68. FROM EMP;  
  69.   
  70. --15,查询员工信息,显示员工工龄,分别按照天,  
  71. --星期,月显示  
  72. SELECT EMPNO,ENAME,SYSDATE - HIREDATE 天,  
  73. (SYSDATE - HIREDATE)/7 星期, (SYSDATE - HIREDATE)/30 月  
  74. FROM EMP;  
  75.   
  76. --16,两个日期相差的月数  
  77. SELECT (SYSDATE-HIREDATE)/30 方式一,  
  78. MONTHS_BETWEEN(SYSDATE,HIREDATE) 方式二  
  79. FROM EMP;  
  80.   
  81. --17,在指定日期上加上若干月  
  82. SELECT ADD_MONTHS(SYSDATE,1) 下个月,  
  83. ADD_MONTHS(SYSDATE,123) "123个月后"  
  84. FROM DUAL;  
  85.   
  86. --18,某个日期当月的最后一天  
  87. SELECT LAST_DAY(SYSDATE)   
  88. FROM DUAL;  
  89.   
  90. --19,下周六  
  91. SELECT NEXT_DAY(SYSDATE,'星期五')  
  92. FROM DUAL;  
  93.   
  94. --20,对日期进行四舍五入  
  95. SELECT ROUND(SYSDATE,'MONTH') 月,  
  96. ROUND(SYSDATE,'YEAR')   
  97. FROM DUAL;  
  98.   
  99. --21,对日期进行截断  
  100. SELECT TRUNC(SYSDATE,'MONTH') 月,  
  101. ROUND(SYSDATE,'YEAR')  
  102. FROM DUAL;  
  103.   
  104. --22,日期格式  
  105. SELECT *   
  106. FROM EMP  
  107. WHERE HIREDATE =   
  108. TO_DATE('1982-01-23','YYYY-MM-DD');  
  109.   
  110. --23,以指定格式当前日期  
  111. SELECT TO_CHAR(SYSDATE,  
  112. 'YYYY-MM-DD HH24:MI:SS"今天是"DAY')  
  113. FROM DUAL;  
  114.   
  115. --24,查询员工信息,显示员工的编号,姓名,月薪,  
  116. --要求有货币代码(L),千位符(,),小数点  
  117. SELECT EMPNO,ENAME,  
  118. TO_CHAR(SAL,'L9,999.99')  
  119. FROM EMP;  
  120.   
  121. --25,NVL(EXP1,EXP2):当exp1为空时,返回exp2  
  122. --NUL2(EXP1,EXP2,EXP3):当exp1有值,返回exp2;  
  123. --否则返回exp3  
  124. SELECT ENAME,SAL*12+NVL2(COMM,COMM,0) 年收入  
  125. FROM EMP;  
  126.   
  127. --26,NULLIF(EXP1,EXP2),如果exp1=exp2,返回null  
  128. --否则exp1  
  129. SELECT NULLIF('ABC','ABC'),NULLIF('A','AG')   
  130. FROM DUAL;  
  131.   
  132. --27,找到参数列表中,第一个不为空的值  
  133. SELECT ENAME,COMM,SAL,COALESCE(COMM,SAL)  
  134. FROM EMP;  
  135.   
  136. --28,给员工涨工资,根据职位涨,总裁涨1000,  
  137. --经理涨600,其他员工涨400  
  138. SELECT ENAME,JOB,SAL 涨前工资,  
  139. CASE JOB  
  140.      WHEN 'PRESIDENT' THEN SAL + 1000  
  141.      WHEN 'MANAGER' THEN SAL + 600  
  142.      ELSE SAL + 400  
  143. END  
  144. 涨后工资  
  145. FROM EMP;  
  146. --  
  147. SELECT ENAME,JOB,SAL 涨前工资,  
  148. DECODE(JOB,'PRESIDENT',SAL + 1000,  
  149. 'MANAGER',SAL + 600, SAL + 400) 涨后工资  
  150. FROM EMP;  
  151.   
  152. --转换函数(Conversion Functions)  
  153. --转换函数将指定字符从一种类型转换为另一种  
  154. --通常这类函数遵循如下惯例:函数名称后面  
  155. --跟着转换类型以及输出类型。  
  156.   
  157. --29,TO_CHAR(C):将NCHAR,NVARCHAR2,CLOB,NCLOB  
  158. --类型转换为CHAR类型  
  159. SELECT TO_CHAR('AABBCC')   
  160. FROM DUAL;  
  161.   
  162. --30,TO_CHAR(D[,FMT]):将指定的时间(DATE,TIMESTAMP,  
  163. --TIMESTAMP WITH TIME ZONE)按照指定格式转换为  
  164. --VARCHAR2类型。  
  165. SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')  
  166. FROM DUAL;  
  167.   
  168. --31,TO_CHAR(N,[,FMT])将指定数值n按照指定格式fmt  
  169. --转换为varchar2类型并返回  
  170. SELECT TO_CHAR(-100,'L999G99D99MI')  
  171. FROM DUAL;  
  172.   
  173. --32,TO_DATE(C[,FMT[,NLS]])将char,nchar,  
  174. --varchar2,nvarchar2转换为日期类型,如果fmt  
  175. --参数不为空,则按照fmt中指定格式进行转换。  
  176. --注意这里的fmt参数,如果ftm为’J‘,则表示按照公元制  
  177. --(Julian day)转换,c则必须为大于0并小于5373484  
  178. --的正整数。为什么公元制的化,c的值必须不大于5373484  
  179. --呢?因为Oracle的DATE类型的取值范围是公元前  
  180. --4712年1月1日至公元9999年12月31日。  
  181. SELECT TO_DATE(2454334,'J')  
  182. FROM DUAL;  
  183.   
  184. --33,TO_NUMBER(C,[,FMT[,NLS]])将char,nchar,  
  185. --varchar2,nvarchar2型字符串按照fmt中指定格式  
  186. --转换为数值类型并返回。  
  187. SELECT TO_NUMBER('-100.00','9G999D99')  
  188. FROM DUAL;  
  189.   
  190. --34,DECODE(EXP,S1,R1,S2,R2,R[,DEF])可以  
  191. --把它理解成一个增强型的if else,只不过它  
  192. --并不通过多行语句,而是在一个函数内部实现if  
  193. --else的功能。exp作为初始参数,s作为对比值,  
  194. --相同则返回r,如果s有多个,则持续遍历所有s,  
  195. --知道某个条件为真为止,否则返回默认值def(  
  196. --如果指定了的话),如果没有默认值,并且前面  
  197. --的对比也都没有为真,则返回空。毫无疑问,  
  198. --decode是个非常重要的函数,在实现行转列等功能是,  
  199. --都会用到。  
  200. SELECT DECODE('a2','a1','true1','a2','true2',  
  201. 'default')  
  202. FROM DUAL;  
  203.   
  204. --35,GREATEST(N1,N2,...N)返回序列中的最大值  
  205. SELECT GREATEST(14,3,5,3)  
  206. FROM DUAL;  
  207.   
  208. --36,LEAST(N1,N2,...N)返回序列中最小值  
  209. SELECT LEAST(12,3,5,5)  
  210. FROM DUAL;  
  211.   
  212. --37,NULLIF(C1,C2)逻辑等于CASE WHEN C1 = C2  
  213. --THEN NULL ELSE C1 END  
  214. SELECT NULLIF('A','B'),NULLIF('A','A')  
  215. FROM DUAL;  
  216.   
  217. --38,NVL(C1,C2)逻辑等价于IF C1 IS NULL THEN  
  218. --C2 ELSE C1 END,C1,C2可以是任何类型,如果两者  
  219. --类型不同,则oracle会自动将c2转换为c1的类型  
  220. SELECT NVL(NULL,'12')  
  221. FROM DUAL;  
  222.   
  223. --39,NVL2(C1,C2,C3)如果c1非空则返回c2,如果c1为  
  224. --空则返回c3  
  225. SELECT NVL2('A','B','C') ,  
  226. NVL2(NULL,'B','C')  
  227. FROM DUAL;  
  228.   
  229. --40,SYS_CONNECT_BY_PATH(COL,C)该函数只能应用于  
  230. --树状查询,返回通过c1连接的从根节点的路径,该  
  231. --函数必须与connect by子句共同使用  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!