--SQL 基础-->常用函数

--==================================

/*

一、函数的分类

SQL函数一般分为两种

单行函数 基于单行的处理,一行产生一个结果

多行函数 基于多行的处理,对多行进行汇总,多行产生结果

二、函数形式

function_name [(arg1, arg2,...)]

三、常用的单行函数:

1. 字符函数:

lower(x)   转小写

upper(x)   转大写

initcap(x) 单词首字母转大写

concat(x,y)   字符连接与| | 功能类似

substr(x,start [,length])   取子串

格式: substr('asdfasdfasdfasddf',1,3)

length(x)  取字符串长度

lpad | rpad(x,width [,pad_string]) 字符定长,(不够长度时,左|右填充)

trim([trim_charFROM] x)  删除首部、尾部字符

格式:trim('h' from 'hello hello')

trim 默认删除方式是both

leading   只删首部   trim(leading 'h' from 'hello helloh')

trailing  只删尾部   trim(trailing 'h' from 'hello helloh')

ltrim(x[,trim_string])  从x右边删除字符  等价于使用trailing

rtrim(x[,trim_string])  从x左边删除字符  等价于使用leading

instr   返回子字符串在字符串中的位置

格式:instr(string,substring,position,occurence)

replace(x,search_string,replace_string)   字符替换

格式:replace('字符', '字符' ,'字符')

将字符中的字符,替换成字符

2.  数值函数:

round(x [,y])      四舍五入

trunc(x,[,y])       截断

mod(m,n)            求余

ceil(x)                 返回特定的最小数(大于等于x的最小整数)

floor(x)            返回特定的最大数(小于等于x的最大整数)

3.  日期函数:

sysdate    返回系统当前日期

实际上ORACLE内部存储日期的格式是:世纪,年,月,日,小,分钟,秒。

不管如何输入都这样

9i开始,默认的日期格式是:DD-MON-RR,之前是DD-MON-YY

RR 和YY 都是世纪后的两位,但有区别

ORACLE的有效日期范围是:公元前年月日-年月日

RR日期格式:

1、如果当前年份最后两位是:-,并且指定年份的最后两位也为-,

则返回本世纪

例:当前年:, 01--,表示2008 年

2、如果当前年份最后两位是:-,指定年份最后两位为50-

则返回上世纪。

例:当前年:,01--,表示1998

3、如果当前年最后两位为:-,指定年份最后两位为0-,

则返回下世纪。

例:当前年:,--表示的是年

4、如果当前年最后两位是:-,指定年份最后两位为:-

则返回本世纪。

例:当前年:,--表示的是年

months_between(x,y) 两个日期之间相差的月数

例:查询最近个月入职的员工

add_months(x,y)      返回x上加上y个月后的结果

last_day(x)           返回指定日期所在月最后一天的日期

next_day(x,day)    返回指定日期的下一day的时间值,day是一个文本串,比如SATURDAY

extract       提取日期

select extract(day from sysdate) from dual

select extract(month from sysdate) from dual;

select extract(year from sysdate) from dual;

4.  转换函数:

TO_DATE(char[, 'format_model']) TO_DATE函数将一个字符串转换成日期格式

函数有个fx 修饰语。这个修饰语为TO_DATE函数的字符函

数中的独立变量和日期格式指定精确匹配.

TO_CHAR(date, 'format_model')   转换为CHAR类型,

必须与单引号一起嵌入,区分大小写,

用逗号把日期数值分开,有一个fm 移除填补空白或者阻止零开头

TO_CHAR(number, 'format_model')

TO_NUMBER(char[, 'format_model'])  TO_NUMBER 函数将一个字符串转换成一个数字格式:

select to_date('1999-09-23','yyyy-mm-dd') from dual;

数据类型的转换分为隐式数据类型转换和显式数据类型转换

在表达式中, Oracle服务器能自动地转换下列各项,即隐式转换:

VARCHAR2 or CHAR  =====〉NUMBER

VARCHAR2 or CHAR  =====〉DATE

对表达式赋值, Oracle服务器能自动地转换下列各项,即隐式转换:

NUMBER =======〉VARCHAR2 or CHAR

DATE   =======〉VARCHAR2 or CHAR

日期格式元素:

YYYY   数字年份

YEAR   英文年份

MM  数字月

MONTH  英文月

MON 英文缩写

DD  数字日

DY  英文缩写

DAY 英文

5.  通用函数

decode 条件判断

格式:decode (col|expression,search1,result1 [,search2,result2,...] [,default])

判断col|exporession的值,当search1匹配时,则返回,result1,

与search2匹配时,返回result2 ... 如果都不匹配,返回default。

select EMPNO,ENAME,JOB,SAL,

decode(job,'CLERK',SAL*1.15,'SALESMAN',SAL*1.1,SAL*1.12) NEW_SAL

FROM SCOTT.EMP;

if then else  条件判断

case 表达式

CASE expr WHEN comparison_expr1 THEN return_expr1

[WHEN comparison_expr2 THEN return_expr2

WHEN comparison_exprn THEN return_exprn

ELSE else_expr]

END

  1. 四、演示*/
  2.  
  3. --lower函数
  4. SQL> select lower('SQL') from dual;
  5.  
  6. LOW
  7. ---
  8. sql
  9.  
  10. SQL> select EMPNO,ENAME,JOB from scott.emp where lower(ename) like 'a%';
  11.  
  12. EMPNO ENAME JOB
  13. ---------- ---------- ---------
  14. 7499 ALLEN SALESMAN
  15. 7876 ADAMS CLERK
  16.  
  17. SQL> insert into scott.emp(empno,ename) values(9999,'albert');
  18.  
  19. 1 row created.
  20.  
  21. SQL> select * from scott.emp where lower(ename) like 'a%';
  22.  
  23. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  24. ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
  25. 9999 albert
  26. 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
  27. 7876 ADAMS CLERK 7788 1987-05-23 1100 20
  28.  
  29. SQL> select * from scott.emp where ename like 'A%';
  30.  
  31. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  32. ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
  33. 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
  34. 7876 ADAMS CLERK 7788 1987-05-23 1100 20
  35.  
  36. --upper函数
  37. SQL> select upper('SQL Course') as Upper_Char from dual;
  38.  
  39. UPPER_CHAR
  40. ----------
  41. SQL COURSE
  42.  
  43. --单词首子母转大写
  44. SQL> select initcap(ename) as initcap_name scott.emp where ename = 'albert';
  45.  
  46. INITCAP_NAME
  47. ----------
  48. Albert
  49.  
  50. --字符的拼接,||与concat等效
  51. SQL> select ename || ' is an ' || job from scott.emp where ename = 'SCOTT';
  52.  
  53. ENAME||'ISAN'||JOB
  54. ---------------------------
  55. SCOTT is an ANALYST
  56.  
  57. SQL> select concat(concat(ename,' is an '),job) as concat_str from scott.emp where ename = 'SCOTT';
  58.  
  59. CONCAT_STR
  60. --------------------------
  61. SCOTT is an ANALYST
  62.  
  63. --SUBSTR,截取子串,下面的例子从第个位置开始连续截取个字符
  64. SQL> select substr('HelloWorld',2,3) from dual;
  65.  
  66. SUB
  67. ---
  68. ell
  69.  
  70. --LENGTH 取字符串长度
  71. SQL> select length('HelloWord') as String_length from dual;
  72.  
  73. STRING_LENGTH
  74. -------------
  75. 9
  76.  
  77. -- lpad | rpad 字符串的填充
  78. -- lpad,左填充,直到达到指定长度为止
  79. SQL> select lpad('salary',10,'*') as String_Lpad from dual;
  80.  
  81. STRING_LPA
  82. ----------
  83. ****salary
  84.  
  85. --指定长度为,多出的部分被截断
  86. SQL> select lpad('salary',4,'*') as String_Lpad from dual;
  87.  
  88. STRI
  89. ----
  90. sala
  91.  
  92. --rpad,右填充,直到达到指定长度为止
  93. SQL> select rpad('salary',10,'|') as String_Rpad from dual;
  94.  
  95. STRING_RPA
  96. ----------
  97. salary||||
  98.  
  99. --指定长度为,多出的部分被截断
  100. SQL> select rpad('salary',5,'|') as String_Rpad from dual;
  101.  
  102. STRIN
  103. -----
  104. salar
  105.  
  106. -- trim 删除首尾字符,格式:trim('h' from 'hello hello'),默认的方式为both
  107. SQL> select trim('h' from 'hello helloh') as String_Trim from dual;
  108.  
  109. STRING_TRI
  110. ----------
  111. ello hello
  112.  
  113. -- trim 删除首尾字符,指定leading只删首部
  114. SQL> select trim(leading 'h' from 'hello helloh') as Trim_Leading from dual;
  115.  
  116. TRIM_LEADIN
  117. -----------
  118. ello helloh
  119.  
  120. -- trim 删除首尾字符,指定trailing只删尾部
  121. SQL> select trim(trailing 'h' from 'hello helloh') as Trim_Trailling from dual;
  122.  
  123. TRIM_TRAILL
  124. -----------
  125. hello hello
  126.  
  127. --rtrim ,ltrim
  128. SQL> select rtrim('hello helloh','h') as Rtrim_String ,
  129. 2 ltrim('hello helloh','h') as Ltrim_String
  130. 3 from dual;
  131.  
  132. RTRIM_STRIN LTRIM_STRIN
  133. ----------- -----------
  134. hello hello ello helloh
  135.  
  136. --replace 字符替换
  137. SQL> select replace('Jack and Johnson','J','Bl') as String_Replace from dual;
  138.  
  139. STRING_REPLACE
  140. ------------------
  141. Black and Blohnson
  142.  
  143. --instr 下面的示例从第个字符开始,返回第二个OR的位置
  144. SQL> select instr('CORPORATE FOLLOR','OR',3,2) as Instring from dual;
  145.  
  146. INSTRING
  147. ----------
  148. 15
  149.  
  150. --round 四舍五入函数
  151. SQL> select round(102.253,2) as round_func from dual;
  152.  
  153. ROUND_FUNC
  154. ----------
  155. 102.25
  156.  
  157. SQL> select round(102.253,0) as round_func from dual;
  158.  
  159. ROUND_FUNC
  160. ----------
  161. 102
  162.  
  163. SQL> select round(102.253,-1) as round_func from dual;
  164.  
  165. ROUND_FUNC
  166. ----------
  167. 100
  168.  
  169. --trunc 截断函数
  170. SQL> select trunc(2010.328) as trunc_func_1,
  171. 2 trunc(2010.328,1) as trunc_func_2,
  172. 3 trunc(2010.328,-1) as trunc_func_3
  173. 4 from dual;
  174.  
  175. TRUNC_FUNC_1 TRUNC_FUNC_2 TRUNC_FUNC_3
  176. ------------ ------------ ------------
  177. 2010 2010.3 2010
  178.  
  179. --#MOD(m,n) 取余函数
  180. SQL> select mod(2010,3) as mod_func from dual;
  181.  
  182. MOD_FUNC
  183. ----------
  184. 0
  185.  
  186. SQL> select mod(5,3) as mod_func from dual;
  187.  
  188. MOD_FUNC
  189. ----------
  190. 2
  191.  
  192. --ceil(x) 返回特定的最小数(大于等于x的最小整数)
  193. SQL> select ceil(593.3) as ceil_func from dual;
  194.  
  195. CEIL_FUNC
  196. ----------
  197. 594
  198.  
  199. --floor(x) 返回特定的最大数(小于等于x的最大整数)
  200. SQL> select floor(593.4) as floor_func from dual;
  201.  
  202. FLOOR_FUNC
  203. ----------
  204. 593
  205.  
  206. --month_between(日期,日期)两个日期相差的月数
  207. SQL> select empno,ename,job,months_between(sysdate,hiredate) as diff_month from scott.emp;
  208.  
  209. EMPNO ENAME JOB DIFF_MONTH
  210. ---------- ---------- --------- ----------
  211. 9999 albert
  212. 7369 SMITH CLERK 351.370601
  213. 7499 ALLEN SALESMAN 349.273827
  214. 7521 WARD SALESMAN 349.209311
  215. 7566 JONES MANAGER 347.854472
  216. 7654 MARTIN SALESMAN 342
  217. 7698 BLAKE MANAGER 346.88673
  218. 7782 CLARK MANAGER 345.628666
  219. 7788 SCOTT ANALYST 275.306085
  220. 7839 KING PRESIDENT 340.370601
  221. 7844 TURNER SALESMAN 342.660924
  222.  
  223. SQL> select * from scott.emp where months_between(sysdate,hiredate) <= 300;
  224.  
  225. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  226. ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
  227. 7788 SCOTT ANALYST 7566 1987-04-19 3000 20
  228. 7876 ADAMS CLERK 7788 1987-05-23 1100 20
  229.  
  230. --add_months(日期,n) 返回在指定的日期后,加上n个月后的日期
  231. SQL> select add_months(sysdate,5) from dual;
  232.  
  233. ADD_MONTHS
  234. ----------
  235. 2010-08-28
  236.  
  237. --last_day(sysdate) 返回指定日期所在月最后一天的日期
  238. SQL> select last_day(sysdate) from dual;
  239.  
  240. LAST_DAY(S
  241. ----------
  242. 2010-03-31
  243.  
  244. --next_day 返回指定日期的下一day的时间值,day是一个文本串,比如SATURDAY
  245. SQL> select next_day('05-FEB-2005','TUESDAY') as nextday from dual;
  246.  
  247. NEXTDAY
  248. ---------
  249. 08-FEB-05
  250.  
  251. /*EXTRACT*/
  252.  
  253. SQL> select extract(day from sysdate) from dual;
  254.  
  255. EXTRACT(DAYFROMSYSDATE)
  256. -----------------------
  257. 28
  258.  
  259. SQL> select extract(month from sysdate) from dual;
  260.  
  261. EXTRACT(MONTHFROMSYSDATE)
  262. -------------------------
  263. 3
  264.  
  265. SQL> select extract(year from sysdate) from dual;
  266.  
  267. EXTRACT(YEARFROMSYSDATE)
  268. ------------------------
  269. 2010
  270.  
  271. --使用ROUND TRUNC函数处理日期
  272. --round(sysdate,'MONTH') 当月第一天
  273. --round(sysdate,'YEAR') 当年的第一天
  274. --trunc(sysdate,'MONTH') 当月第一天
  275. --trunc(sysdate,'YEAR') 当年的第一天
  276. SQL> select sysdate,round(sysdate,'MONTH'),round(sysdate,'YEAR'),
  277. 2 trunc(sysdate,'MONTH'),trunc(sysdate,'YEAR')
  278. 3 from dual;
  279.  
  280. SYSDATE ROUND(SYS ROUND(SYS TRUNC(SYS TRUNC(SYS
  281. --------- --------- --------- --------- ---------
  282. 15-APR-10 01-APR-10 01-JAN-10 01-APR-10 01-JAN-10
  283.  
  284. --类型转换
  285. -- to_char
  286. SQL> select empno,ename,hiredate,to_char(hiredate,'fmDD Month YYYY') as hiredate2,
  287. 2 to_char(hiredate,'DD MM YYYY') as hiredate3
  288. 3 from scott.emp
  289. 4 where sal > 2500;
  290.  
  291. EMPNO ENAME HIREDATE HIREDATE2 HIREDATE3
  292. ---------- ---------- --------- ----------------- ----------
  293. 7566 JONES 02-APR-81 2 April 1981 02 04 1981
  294. 7698 BLAKE 01-MAY-81 1 May 1981 01 05 1981
  295. 7788 SCOTT 19-APR-87 19 April 1987 19 04 1987
  296. 7839 KING 17-NOV-81 17 November 1981 17 11 1981
  297. 7902 FORD 03-DEC-81 3 December 1981 03 12 1981
  298.  
  299. SQL> select to_char(12345.67) as char1,to_char(12345.67,'99,999.99') as char2
  300. 2 from dual;
  301.  
  302. CHAR1 CHAR2
  303. -------- ----------
  304. 12345.67 12,345.67
  305.  
  306. --当被转换的数据位数超过格式指定位数,则出现错误。
  307. SQL> select to_char(12345678.90,'99,999.99') as char1 from dual;
  308.  
  309. CHAR1
  310. ----------
  311. ##########
  312.  
  313. --to_number
  314. SQL> select to_number('970.13') as number1,
  315. 2 to_number('970.13') + 35.5 as nunber2,
  316. 3 to_number('-$12,345.67','$99,999.99') as number3
  317. 4 from dual;
  318.  
  319. NUMBER1 NUNBER2 NUMBER3
  320. ---------- ---------- ----------
  321. 970.13 1005.63 -12345.67
  322.  
  323. --to_date
  324. --注意:最终日期采用默认格式DD-MONYY显示
  325. SQL> select to_date('05-JUL-2008') as date1,to_date('05-JUL-08') as date2,
  326. 2 to_date('July 5,2008','MONTH DD,YYYY') as date3,
  327. 3 to_date('7.4.08','MM.DD.YY') as date4
  328. 4 from dual;
  329.  
  330. DATE1 DATE2 DATE3 DATE4
  331. --------- --------- --------- ---------
  332. 05-JUL-08 05-JUL-08 05-JUL-08 04-JUL-08
  333.  
  334. --case when
  335. SQL> select empno,ename,sal,deptno,case deptno when 20 then 1.10 * sal
  336. 2 when 30 then 1.20 * sal
  337. 3 else 1.30 * sal end as newsal
  338. 4 from scott.emp order by deptno;
  339.  
  340. EMPNO ENAME SAL DEPTNO NEWSAL
  341. ---------- ---------- ---------- ---------- ----------
  342. 7782 CLARK 2450 10 3185
  343. 7839 KING 5000 10 6500
  344. 7934 MILLER 1300 10 1690
  345. 7566 JONES 2975 20 3272.5
  346. 7902 FORD 3000 20 3300
  347. 7876 ADAMS 1100 20 1210
  348. 7369 SMITH 800 20 880
  349. 7788 SCOTT 3000 20 3300
  350. 7521 WARD 1250 30 1500
  351. 7844 TURNER 1500 30 1800
  352.  
  353. /*DECODE*/
  354. SQL> select empno,ename,job,sal, decode(job,'CLERK',sal*1.5,'SALESMAN',sal*1.1,sal*1.2) as newsal from scott.emp;
  355.  
  356. EMPNO ENAME JOB SAL NEWSAL
  357. ---------- ---------- --------- ---------- ----------
  358. 9999 albert
  359. 7369 SMITH CLERK 800 1200
  360. 7499 ALLEN SALESMAN 1600 1760
  361. 7521 WARD SALESMAN 1250 1375
  362. 7566 JONES MANAGER 2975 3570
  363. 7654 MARTIN SALESMAN 1250 1375
  364. 7698 BLAKE MANAGER 2850 3420
  365. 7782 CLARK MANAGER 2450 2940
  366. 7788 SCOTT ANALYST 3000 3600
  367. 7839 KING PRESIDENT 5000 6000
  368. 7844 TURNER SALESMAN 1500 1650

SQL 常用函数及示例的更多相关文章

  1. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  2. SQL常用函数总结

    SQL常用函数总结 这是我在项目开发中使用db2数据库写存储过程的时候经常用到的sql函数.希望对大家有所帮助: sql cast函数 (1).CAST()函数的参数是一个表达式,它包括用AS关键字分 ...

  3. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  4. ylb:SQL 常用函数

    ylbtech-SQL Server: SQL Server-SQL 常用函数 1,数学函数 2,日期和时间函数 3,字符串函数 4,转换函数 1,ylb:SQL 常用函数返回顶部 1,数学函数 2, ...

  5. SQL常用函数之五 str()

    原文:SQL常用函数之五 str() 使用str函数   :STR 函数由数字数据转换来的字符数据.   语法      STR    (    float_expression    [    ,  ...

  6. oracle学习笔记(九) SQL常用函数说明以及使用

    SQL常用函数说明以及使用 以下补充以下常用的函数,更多的请看oracle函数API文档 to_char to_char(8.58,'9.99') to_char(8.50,'9.00') to_ch ...

  7. SQL常用函数

    SQL中常用的函数有类型转换函数.字符串函数和日期使用函数.更多具体的函数用法参见DBMS中的帮助文档. 类型转换函数 cast(值 as 类型) update 表名 set 列1=列1+cast(列 ...

  8. SQL server常用函数使用示例

    select convert(nvarchar(10),id)+name from t //convert():数据类型转换,将“id”列转换为“nvarchar”. select cast(id a ...

  9. Oracle学习笔记六 SQL常用函数

    函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:

随机推荐

  1. 其实今天没有欲望..-MySQLi

    hi 中午爽爽的游了会儿泳,但是下午把一拳超人看完了,竟然萌生不出学习的欲望了...强迫自己更新点东西吧,一会儿看书去. 1.MySQLi 二.MySQLi基于OOP的编程 2.1 使用解析 --基本 ...

  2. 【温故而知新-Javascript】使用Web存储

    Web存储允许我们在浏览器里保存简单的键/值数据.Web存储和cookie很相似,但它有着更好的实现方式,能保存的数据量也很大.这两种类型共享相同的机制,但是被保存数据的可见性和寿命存在区别. PS: ...

  3. 三维网格去噪算法(L0 Minimization)

    [He et al. 2013]文章提出了一种基于L0范数最小化的三角网格去噪算法.该思想最初是由[Xu et al. 2011]提出并应用于图像平滑,假设c为图像像素的颜色向量,▽c为颜色向量的梯度 ...

  4. Android 之窗口小部件详解--App Widget

    Android 之窗口小部件详解--App Widget  版本号 说明 作者 日期  1.0  添加App Widge介绍和示例  Sky Wang 2013/06/27        1 App ...

  5. JAVA单例

    单例模式: 1 public class Person{ 2 public static Person per//定义一个静态变量,用来储存当前类的对象 3 private Person()//构造方 ...

  6. NVIDIA显卡设置

    在玩3D游戏时,因为我的显卡不是特别给力,所以针对性能做出牺牲质量换取性能的调整. 简单设置 简单的方法是,3D设置-通过预览调整图像设置,根据偏重点来设置平衡:性能或者质量. 高级设置 如果你想自行 ...

  7. JSP第5次测试---测试分析

    1. (选择一项) A: B: C: D:  解析:构造方法方法名与类名必须相同,并且没有返回值,在对象创建时被调用:可以有带参和无参的构造方法同时出现于一个类. 2. (选择一项) A: B: C: ...

  8. 夯实基础之php学习-1基础篇

    1,单引号和双引号的区别 单引号表示字符串,双引号能解析字符串中的变量,所以,如果没有变量,尽量用单引号,加快解析速度 当字符串需要单引号或者双引号的时候,可以用转义字符代替 2,类型转换 通过(bo ...

  9. 转:如何在32位程序中突破地址空间4G的限制

    //如何在32位程序中突破地址空间4G的限制 //首先要获得内存中锁定页的权限 #define _WIN32_WINNT 0x0501 //xp系统 #include <windows.h> ...

  10. 折腾了1周把程序从sqlserver迁移到oracle上了,每折腾一次需要耗费1周时间

    主要花费时间的事情: 1:安装配套的服务器,安装操作系统,安装数据库,配置远程访问等等,一般会耗费1天时间,甚至2天时间,若手头安装盘不齐全,需要耗费更多时间. 2:远程传输安装文件.特别是开发环境等 ...