当前位置:文档之家› sql常用函数

sql常用函数

sql常用函数
sql常用函数

1.3 常用函数

1.3.1 字符函数(11个)

许多SQL解释器都提供了字符和字符串的处理功能。本部分覆盖了大部分字符串处理

函数,这一部分的例子使用字符函数示范表。

输入\输出:

SQL> select * from 字符函数示范;

姓名 M CODE

---------- ---------- ---------- ----------

PURVIS KELLY A 32

TAYLOR CHUCK J 67

CHRISTINE LAURA C 65

ADAMS FESTER M 87

COSTALES ARMANDO A 77

KONG MAJOR G 52

1.3.1.1 CHR

该函数返回与所给数值参数等当的字符,返回的字符取决于数据库所依赖的字符集。

例如,示例的数据库采用了ASCLL字符集。示例数据库的代码列的内容为数字。

输入:

SQL> SELECT CODE,CHR(CODE)FROM 字符函数示范;

CODE CHR (CODE)

---------- ---------

32

67 C

65 A

87 W

77 M

52 4

在数值32处显示为空白,因为32在ASCLL码表中是空格。

1.3.1.2 CONCAT

我们在以前学到过一个与这个函数所执行的功能相当的操作,|| 符号表示将两个字符串连接起来,CONCAT也是完成这个功能的。使用方法如下:输入:

SQL> SELECT CONCAT(姓,名)"姓名" FROM 字符函数示范;

姓名

--------------------

PURVISKELLY

TAYLORCHUCK

CHRISTINELAURA

ADAMSFESTER

COSTALESARMANDO

KONGMAJOR

当用多个词来做为别名时可以它们使用引号。

1.3.1.3 INITCAP

该函数将参数的第一个字母变为大写,此外其它的字母则转换成小写。

输入:

SQL> SELECT 姓前,INITCAP(姓) 后 FROM 字符函数示范;

前后

---------- ----------

PURVIS Purvis

TAYLOR Taylor

CHRISTINE Christine

ADAMS Adams

COSTALES Costales

KONG Kong

1.3.1.4 LOWER和UPPER

LOWER将参数转换为全部小写字母,而UPPER则把参数全部转换成大写字母。下例是用LOWER函数和UPDATE函数来把数据库的内容转变为小写字母。

输入:

SQL> UPDATE 字符函数示范 SET 名='kelly' WHERE 名='KELLY';

输出:

1 row updated

输入:

SQL> SELECT 名 FROM 字符函数示范;

输出:

----------

kelly

CHUCK

LAURA

FESTER

ARMANDO

MAJOR

输入\输出:

SQL> select 名,upper(名),lower(名) from 字符函数示范;

名 UPPER(名) LOWER(名)

---------- ---------- ----------

kelly KELLY kelly

CHUCK CHUCK chuck

LAURA LAURA laura

FESTER FESTER fester

ARMANDO ARMANDO armando

MAJOR MAJOR major

现在你明白这两个函数的作用了吧!

1.3.1.5 LPAD与RPAD

这两个函数最少需要两个参数最多需要三个参数,每一个参数是需要处理的字符串。

第二个参数是需要将字符串扩充的宽度,第三个参数表示加宽部分用什么字符来做填补。

第三个参数的默认值为空格,但也可以是单个的字符或字符串。

输入\输出:

SQL> SELECT 名,LPAD(名,20,'*') FROM 字符函数示范;

名 LPAD(名,20,'*')

--------------- -----------------------------------------

KELLY ***************KELLY

CHUCK ***************CHUCK

LAURA ***************LAURA

FESTER **************FESTER

ARMANDO *************ARMANDO

MAJOR ***************MAJOR

输入\输出:

SQL> SELECT 名,RPAD(名,20,'*') FROM 字符函数示范;

名 RPAD(名,20,'*')

--------------- -----------------------------------------

KELLY KELLY***************

CHUCK CHUCK***************

LAURA LAURA***************

FESTER FESTER**************

ARMANDO ARMANDO*************

MAJOR MAJOR***************

1.3.1.6 LTRIM与RTRIM

LTRIM和RTRIM至少需要一个参数,最多允许两个参数。第一个参数与LPAD和RPAD

类似,是一个字符串;第二个参数也是一个字符或字符串,默认则是空格。如果第二个参

数不是空格的话,那么该函数将会像剪除空格那样剪除所指定的字符。如下例:输入\输出:

SQL> SELECT 姓,RTRIM(姓) FROM 字符函数示范;

姓 RTRIM(姓)

--------------- ---------------

PURVIS PURVIS

TAYLOR TAYLOR

CHRISTINE CHRISTINE

ADAMS ADAMS

COSTALES COSTALES

KONG KONG你可以用下边的语句来确认字符中的空格已经被剪除了;

输出证明的确已经进行了剪除工作现在请再试一个LTRIM;

输入\输出:

SQL> SELECT 姓,LTRIM(姓,'C') FROM 字符函数示范;

姓 LTRIM(姓,'C')

--------------- ---------------

PURVIS PURVIS

TAYLOR TAYLOR

CHRISTINE HRISTINE

ADAMS ADAMS

COSTALES OSTALES

KONG KONG

注意第三行和第五行的C已经没有了。

1.3.1.7 REPLACE

该函数需要三个参数,第一个参数是需要搜索的字符串,第二个参数是搜索的内容,第三个参数则是需要替换成的字符串。如果第三个参数省略或者是NULL,那么将只执行搜索操作而不会替换任何内容。

输入\输出:

SQL> SELECT 名,REPLACE(名,'ST','**') 替换后 FROM 字符函数示范;

名替换后

--------------- ------------------------------

KELLY KELLY

CHUCK CHUCK

LAURA LAURA

FESTER FE**ER

ARMANDO ARMANDO

MAJOR MAJOR

1.3.1.8 SUBSTR

这个函数有三个参数,允许你将目标字符串的一部份输出。第一个参数为目标字符串,

第二个字符串是将要输出的子串的起点,第三个参数是将要输出的子串的长度。输入\输出:

SQL> SELECT 名,SUBSTR(名,2,3) FROM 字符函数示范;

名 SUBSTR(名,2,3)

--------------- --------------

KELLY ELL

CHUCK HUC

LAURA AUR

FESTER EST

ARMANDO RMA

MAJOR AJO

●如果第二个参数为负数,那么将会从源串的尾部开始向前定位至负数的绝对

值的位置。

1.3.1.9 TRANSLATE

这一函数有三个参数,目标字符串、源字符串和目的字符串。在目标字符串与源字符

串中均出现的字符,将会被替换成对应的目的字符串的字符。

输入\输出:

SQL>SELECT

名,TRANSLATE(名,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','NNNNNNNNNN AAAAAAAAAAAAAAAAAAAAAAAAA') FROM 字符函数示范;

名 TRANSLATE(名,'0123456789ABCDEF

--------------- ------------------------------

kelly kelly

CHUCK AAAAA

LAURA AAAAA

FESTER AAAAAA

ARMANDO AAAAAAA

MAJOR AAAAA

6 rows selected

●这个函数对大小写是敏感的。

1.3.1.10 INSTR

如果需要知道在一个字符串中满足特定的内容的位置可以使用INSTR,它的第一个参数是目标字符串,第二个参数是匹配的内容,第三和第四个参数是数字,用以指定开始搜索的起点以及指出第几个满足条件的将会被返回。下例将从字符串的第二个字符开始搜索,并返回第一个以O开头的字符的位置。

输入\输出:

SQL> SELECT 姓,INSTR(姓,'O',2,1) FROM 字符函数示范;

姓 INSTR(姓,'O',2,1)

--------------- -----------------

PURVIS 0

TAYLOR 5

CHRISTINE 0

ADAMS 0

COSTALES 2

KONG 2

默认第三个与第四个参数的数值均为1,如果第三个数值为负数,那么将会从后向前搜索。

1.3.1.11 LENGTH

LENGTH将返回指定字符串的长度。例如:

输入\输出:

SQL> SELECT 名,LENGTH(RTRIM(名)) FROM 字符函数示范;

名 LENGTH(RTRIM(名))

--------------- -----------------

kelly 5

CHUCK 5

LAURA 5

FESTER 6

ARMANDO 7

MAJOR 5

这里使用了函数RTRIM,否则LENGTH将全部返回15。

1.3.2 数字函数(6个)

大多数情况下,你所检索到的数据在使用时,需要用到数学函数,大多数SQL 的解释器都

提供了与这里相类似的一些数学函数。这里的例子使用的表名字叫数学函数示范内容如下:

输入\输出:

SQL> SELECT * FROM 数学函数示范;

A B

---------- ----------

3.1415 4

-45 0.707

5 9

-57.667 42

15 55

-7.2 5.3

1.3.

2.1 ABS

ABS函数返回给定数字的绝对值。例如:

输入\输出:

SQL> SELECT ABS(A) FROM 数学函数示范;

ABS(A)

----------

3.1415

45

5

57.667

15

7.2

1.3.

2.2 CEIL和FLOOR

CEIL返回与给定参数相等或比给定参数在的最小整数。FLOOR则正好相反,它返回

与给定参数相等或比给定参数小的最大整数。例如:

输入\输出:

SQL> SELECT CEIL(B) FROM 数学函数示范;

CEIL(B)

----------

4

1

9

42

55

输入\输出:

SQL> SELECT FLOOR(A) FROM 数学函数示范;

FLOOR(A)

----------

3

-45

5

-58

15

-8

1.3.

2.3 MOD

MOD返回数A与数B相除后的余数。例如:

输入\输出:

SQL> SELECT A,B,MOD(A,B) FROM 数学函数示范;

A B MOD(A,B)

---------- ---------- ----------

3.1415 4 3.1415

-45 0.707 -0.459

5 9 5

-57.667 42 -15.667

15 55 15

-7.2 5.3 -1.9

1.3.

2.4 SIGN

如果参数的值为负数,那么SIGN返回-1。如果参数的值为正数,那么SIGN返回1。

如果参数为零,那么SIGN也返回零。请看下例:

输入\输出:

SQL> SELECT A,SIGN(A) FROM 数学函数示范;

A SIGN(A)

---------- ----------

3.1415 1

-45 -1

5 1

-57.667 -1

15 1

-7.2 -1

1.3.

2.5 ROUND

ROUND的作用是四舍五入至指定小数位数。例如:

输入\输出:

SQL> SELECT A,ROUND(A) FROM 数学函数示范;

A ROUND(A)

---------- ----------

3.1415 3

-45 -45

5 5

-57.667 -58

15 15

-7.2 -7

1.3.

2.6 TRUNC

TRUNC的作用是截断指定小数位数。例如:

输入\输出:

SQL> SELECT A,TRUNC(A,1) FROM 数学函数示范;

A TRUNC(A,1)

---------- ----------

3.1415 3.1

-45 -45

5 5

-57.667 -57.6

15 15

-7.2 -7.2

1.3.3日期函数(7个)

在学习日期函数之前,我们先要了解一下基本内容:

ORACLE数据库对日期数据在内部存贮格式:世纪,年,月,日,时,分,秒默认日期显示格式为:DD-MON-RR.

允许你以两位数字表示年份。

SYSDATE函数返回当前系统日期时间。

格式串:

YYYY 年份用四位数字表示

MM 月份用两位数字表示

DD 日期用两位数字表示

HH24:MI:SS AM 用24小时制表示时分秒,AM表示要输出上下午标志

1.3.3.1 SYSDATE

SYSDATE函数返回当前系统日期时间。例如:

输入\输出:

SQL> select sysdate from dual;

SYSDATE

-----------

2005-08-02

1.3.3.2 MONTHS_BETWEEN

如果你想知道在给定的两个日期中有多少个月可以像这样来使用

MONTHS_BETWEEN。例如:

输入\输出:

SQL> select months_between(to_date('2005-8-2','yyyy-mm-dd'),

to_date('2004-8-2','yyyy-mm-dd')) 月数 from dual;

月数

----------

12

1.3.3.3 ADD_MONTHS

该函数的功能是将给定的日期增加一个月。举例:

输入\输出:

SQL> select to_date('2005-8-2','yyyy-mm-dd') 原计划,add_months

(to_date('2005-8-2','yyyy-mm-dd'),2) 修改后计划 from dual;

原计划修改后计划

----------- -----------

2005-08-02 2005-10-02

1.3.3.4 NEXT_DAY

NEXT_DAY将返回与指定日期在同一个星期或之后一个星期内的,你所要求的星期天

数的确切日期。如果你想知道你所指定的日期的星期五是几号可以这样做:

输入\输出:

SQL> select SYSDATE 原日期,next_day(SYSDATE,'星期五') from dual;

原日期 NEXT_DAY(SYSDATE,'星期五')

----------- --------------------------

2005-08-022005-08-05 18:25:52

●本例中的星期五,同样可以用数字5来代替。

1.3.3.5 LAST_DAY

LAST_DAY可以返回指定月份的最后一天。例如,如果你想知道在本月的最后一天是几号时你可以输入:

输入\输出:

SQL> select last_day(SYSDATE) 月末 from dual;

月末

-----------

2005-08-31

1.3.3.6 ROUND

ROUND可以四舍五入日期。

输入\输出:

select sysdate 当前时间,round(sysdate,'year') 格式化后时间 from dual; 当前时间格式化后时间

----------- ------------

2005-08-03 2006-01-01

1.3.3.7 TRUNC

TRUNC可以截断制定日期。

输入\输出:

select sysdate 当前时间,trunc(sysdate,'year') 格式化后时间 from dual;

当前时间格式化后时间

----------- ------------

2005-08-03 2005-01-01

●请比较ROUND和TRUNC的输出结果的差异。

1.3.4 转换函数(3个)

1.3.4.1 TO_NUMBER

该函数的作用是将一个字符串转换成数值。TO_NUMBER(X,Y[,Z]),例如:

输入\输出:

SQL> select to_number('2005') year from dual;

YEAR

---------

2005

1.3.4.2 TO_CHAR

该函数作用是将一个日期或数字转换成一个字符串。TO_CHAR(date,’format_model’)。例如:

输入\输出:

SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2005/08/03 09:14:41

1.3.4.2 TO_DATE

该函数作用是将字符串转化为ORACLE中的一个日期。TO_DATE(string,'format')。例如:

输入\输出:

SQL> select to_date('2005-08-03 09:21:00','yyyy-mm-dd hh24:mi:ss') from dual;

TO_DATE('2005-08-0309:21:00','

------------------------------

2005-08-03 9:21:00

1.3.5 聚合函数(5个)

1.3.5.1 COUNT

该函数将返回满足WHERE条件子句中记录的个数。例如:

SQL> select count(*) from dual;

COUNT(*)

----------

1

1.3.5.2 SUM

该函数将返回某一列的所有数值的和。例如:

SQL> select sum(病人id) from 病人信息;

SUM(病人ID)

-----------

25

1.3.5.3 AVG

AVG可以返回某一列的平均值。例如:

SQL> select avg(实收金额) from 病人费用记录 where 门诊标志=1;

AVG(实收金额)

-------------

98.67

1.3.5.4 MAX

MAX(DISTINCT|ALL)

求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次。例如:

SQL> select max(年龄) from 病人信息;

MAX(年龄)

----------

79

1.3.5.5 MIN

MIN(DISTINCT|ALL)

求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次。例如:

SQL> select min(年龄) from 病人信息;

MIN(年龄)

----------

4

1.3.6.2 NVL

该函数转换NVL值,数据类型必须匹配:例如:

NVL(实收金额,0)

NVL(填制日期,‘2005-08-03')

NVL(开单人,‘无名氏')

SQL> select distinct(nvl(开单人,'无名氏')) 开单人姓名 from 病人费用记录 where 门诊标志=1 and 开单人 is null;

开单人姓名

----------

无名氏

1.3.6.3 DECODE

DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数

解释:

IF AA=V1 THEN RETURN R1

IF AA=V2 THEN RETURN R2

..…

ELSE

RETURN NULL

例如:

decode(收费细目,'西药费','药费','成药费','药费','草药费','药费',收费细目)

1.4 常用的分组函数:

1.4.1 GROUP BY 子句的使用

SQL无法把正常的列和汇总函数结合在一起,这时就需要GROUP BY子句。它可以对SELECT的结果进行分组后在应用汇总函数。例如:

SQL> select 姓名,sum(实收金额) from 病人费用记录 where rownum<7 group by 姓名;

姓名 SUM(实收金额)

-------------------- -------------

秉仁 3.11

杜子滕 3.5

李卫国 70

毛鸭鸭 3.5

王复玉 2

赵卫生 1

1.4.2 HAVING 子句的使用

HAVING子句允许你将汇总函数作为条件,使用在查询语句中。HAVING子句为一组记录设置查询的条件,通常having子句允许用户指定对一个记录组的搜索条件。而通常的where查询条件只针对单记录,不针对记录组例如:

select 姓名,sum(实收金额) from 病人费用记录 where rownum<20 group by 姓名 having sum(实收金额)>2;

姓名 SUM(实收金额)

-------------------- -------------

秉仁 3.11

杜子滕 3.5

李卫国 70

毛鸭鸭 3.5

相关主题
文本预览
相关文档 最新文档