zoukankan      html  css  js  c++  java
  • Oracle基础函数

    [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子句共同使用  
  • 相关阅读:
    玩家上线
    小退
    GS发包到MS
    share初始化
    3 水仙花数
    The left-hand side of an assignment must be a variable,代码中使用了中文的字符
    Mac Sublime Text 浏览器 设置快捷键 让html文件在浏览器打开
    2 质数求解
    1 斐波那契的兔子
    18 赛手的名单
  • 原文地址:https://www.cnblogs.com/guanghe/p/6054105.html
Copyright © 2011-2022 走看看