SQL_4_函数
在SQL的函数中可以执行一些诸如对某一些进行汇总或将一个字符串中的字符转换为大写的操作等;
函数有:汇总函数、日期与时间函数、数学函数、字符函数、转换函数与其他函数。
汇总函数
这是一组函数,它们返回的数值是基于一列的(因为不会对单个的记录求平均值)
COUNT: 返回满足WHERE条件子句中记录的个数
查找多少球员的击球数小于350:SELECT COUNT(*) NUMBER_BELOW_350 FROM TEAMSTATS WHERE HITS/AB<.35;
查找表中所有的记录条数:SELECT COUNT(*) FROM TEAMSTATS;(没有WHERE子句时就返回所有的记录个数)
SUM: 返回某一列的和,只能对数字进行计算。
查找队员总打点的总和:SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEAMSTATS;
查找多个列的和:
SELECT SUM(SINGLES) TOTAL_SINGLES, SUM(DOUBLES) TOTAL_DOUBLES, SUM(HR) TOTAL_HR FROM TEAMSTATS;
AVG: 返回某一列的平均值,只能对数字进行计算。
计算漏球的平均数:SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS;
MAX: 返回某一列的最大值,既可以处理数值也可以处理字符串。
查找打点最高的记录:SELECT MAX(HITS) FROM TEAMSTATS;
MIN: 与MAX相似,返回某一列的最小值,既可以处理数值也可以处理字符串。
可以同时使用MAX和MIN获得数值的界限:SELECT MIN(AB), MAX(AB) FROM TEAMSTATS;
VARIANCE: 方差,且只应用于数值。
SELECT VARIANCE(HITS) FROM TEAMSTATS;
STDDEV: 返回标准差,且只应用于数值。
SELECT STDDEV(HITS) FROM TEAMSTATS;
日期和时间函数
ADD_MONTHS: 将给定的日期增加一个月
计划推迟两个月:SELECT TASK, STARTDATE, ENDDATE ORIGINAL_END, ADD_MONTHS(ENDDATE,2) FROM PROJECT;
LAST_DAY: 返回指定月份的最后一天
在ENDDATE列中给出月份的最后一天是几号:SELECT ENDDATE, LAST_DAY(ENDDATE) FROM PROJECT;
MONTHS_BETWEEN: 返回给定两个日期之间的间隔月数,即两个日期中间隔了几个月
查看每个项目持续的时间:
SELECT TASK, STARTDATE,ENDDATE,MONTHS_BETWEEN(STARTDATE,ENDDATE) DURATION FROM PROJECT;
显示所有在1995年5月19日以前的比赛:
SELECT * FROM PROJECT WHERE MONTHS_BETWEEN('19 MAY 95',STARTDATE)>0;
NEW_TIME:把时间调整到你所在的时区
NEXT_DAY: 将返回与指定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期:
SYSDATE: 返回系统的日期和时间
返回系统日期:SELECT DISTINCT SYSDATE FROM PROJECT;
查找今天启动的项目:SELECT * FROM PROJECT WHERE STARTDATE>SYSDATE;
数学函数:
ABS:返回给定数字的绝对值
返回A列的绝对值:SELECT ABS(A) ABS_VALUE FROM NUMBERS;
CEIL和FLOOR: 返回与给定参数相等或比给定参数大的最小整数,FLOOR返回与给定参数相等或比给定参数小的最大整数
SELECT B,CEIL(B) CEILING FROM NUMBERS;
SELECT A,FLOOR(A) FLOOR FROM NUMBERS;
COS,COSH,SIN,SINH,TAN,TANH:返回给定参数的三角函数值,默认的参数认定为弧度制。
EXP: 返回以指定的参数为指数,以e为底数的幂值。
LN和LOG: 两个对数函数,其中LN是返回给定参数的自然对数。
MOD:取模运算
计算A与B相除后的余数:SELECT A,B,MOD(A,B) FROM NUMBERS;
POWER: 返回某一个数对另一个数的幂,第一个参数为底数,第二个指数。
SIGN: 如果参数的值为负数,那么SIGN返回-1,如果参数的值为正数,那么SIGN返回1,如果参数为零,则返回零。
SQRT: 返回参数的平方根,负数不能开平方,所以不能应用于负数。
字符函数
CHR: 返回与所给数值参数等当的字符,返回的字符取决于数据库所依赖的字符集。
CONCAT: 连接两个字符串
SELECT CONCAT(FIRSTNAME,LASTNAME) "FIRST AND LAST NAMES" FROM CHARACTERS;
INITCAP: 该函数将参数的第一个字母变为大写,此外其它的字母转换为小写。
SELECT FIRSTNAME BEFORE, INITCAP(FIRSTNAME) AFTER FROM CHARACTERS;
LOWER和UPPER:LOWER将参数转换为全部小写字母而UPPER则把参数全部转换成大写
配合UPDATE函数把数据库的内容转变为小写字母:UPDATE CHARACTERS SET FIRSTNAME='kelly' WHERE FIRSTNAME='KELLY';
SELECT FIRSTNAME,UPPER(FIRSTNAME),LOWER(FIRSTNAME) FROM CHARACTERS;
LPAD,RPAD: 这两个函数最少需要两个参数,最多需要三个参数。第一个参数是需要处理的字符串,第二个参数是需要将字符串扩充的宽度,第三个 参数表示加宽部分用什么字符来做填补,第三个参数的默认值为空格,但也可以是单个的字符或字符串。
SELECT LASTNAME,LPAD(LASTNAME,20,'*') FROM CHARACTERS;
SELECT LASTNAME,RPAD(LASTNAME,20,'*') FROM CHARACTERS;
LTRIM与RTRIM: 至少需要一个参数,最多允许两个参数。第一个参数与LPAD和PRAD类似,是一个字符串,第二个参数也是一个字符或字符串,默认则是空格,如果第二个参数不是空格的话,那么该函数将会像剪除空格那样剪除所指出的字符,如下例:
SELECT LASTNAME,RTRIM(LASTNAME) FROM CHARASTERS;
剪除第三行和第五行的字符C: SELECT LASTNAME,LTRIM(LASTNAME,'C') FROM CHARACTERS;
REPLACE: 需要三个参数,第一个是需要搜索的字符串,第二个是搜索的内容,第三个是需要替换成的字符串,假如第三个参数省略或者是NULL,将 只执行搜索操作而不会替换任何内容。
SELECT LASTNAME, REPLACE(LASTNAME, 'ST','**') REPLACEMENT FROM CHARACTERS;
SUBSTR: 需要三个参数,输出字符串的一部分,第一个参数为目标字符串,第二个是要输出的子串的起点,第三个是要输出的子串的长度。
SELECT FIRSTNAME,SUBSTR(FIRSTNAME,2,3) FROM CHARACTERS;
如果第二个参数为负数,则从源串的尾部开始向前定位至负数的绝对值的位置
TRANSLATE: 需要三个参数,第一个是目标字符串,源字符串,目的字符串,在目标字符串与源字符串中均出现的字符将会被替换成对应的目的字符 串的字符,这个函数对大小写是敏感的。
SELECT FIRSTNAME,TRANSLATE(FIRSTNAME '0123456789ABCDEFDHIJKLMNOPQRSTUVWXYZ','NNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAAAAA') FROM CHARACTERS;
INSTR: 第一个参数时目标字符串,第二个参数时匹配的内容,第三和第四个参数是数字,用以指定开始搜索的起点以及指出第几个满足条件的将会被 返回,如果第三个数值为负数,将会从后向前搜索。
从字符串的第二个字符开始搜索,并返回第一个以O开头的字符的位置:
SELECT LASTNAME, INSTR(LASTNAME, 'O',2,1) FROM CHARACTERS;
LENGTH:返回指定字符串的长度
SELECT FIRSTNAME,LENGTH(RTRIM(FIRSTNAME)) FROM CHARACTERS;使用了函数RTRIM,否则将全部返回15,包括空格
转换函数
TO_CHAR: 将数字转换为字符型
SELECT TESTNUM,TO_CHAR(TESTNUM) FROM CONVERT;
TO_NUMBER: 将字符串型转换为数值型
SELECT NAME,TESTNUM,TESTNUM*TO_NUMBER(NAME) FROM CONVERT;
GREATEST与LEAST: 返回几个表达式中最大的或最小的,这两个函数可以处理字符也可以处理数字。
SELECT GREATEST('ALPHA','BRAVO','FOXTROT','DELTA') FROM CONVERT;
不写FROM会出错,由于给定的表有三行,所以返回了三个数据。
SELECT LEAST(34, 567,3,45,1090) FROM CONVERT;
USER: 返回当前使用数据库的用户的名字
SELECT USER FROM CONVERT;