2. SQL函数:对数据的进一步处理
Posted 江湖@小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2. SQL函数:对数据的进一步处理相关的知识,希望对你有一定的参考价值。
函数:对数据的进一步处理
1. 汇总函数
这是一组函数,它们返回的数值是基于一列的(因为你不会对单个的记录求它的平均数)
1. COUNT
该函数将返回满足 where 条件子句中记录的个数。
select count(*) from 表 where 列1 < 20;
为了是这段代码更易读,可以使用别名:
select count(*) num_列1_20
from 表
where 列1 < 20;
注:如果你使用的 count 时无 where 子句,
那么它将返回表中的所有记录的个数。
2.SUM
SUM 就如同它的本意一样,它返回某一列的所有数值的和。
select sum(列1) total_列1,
sum(列2) total_列2 from 表;
类似地,如果想找一下所有点数在300(包括300)以上的人员:
select sum(列1) total_列1 , sum(列2) total_列2
from 表 where hits >= 300;
select sum(列1)/sum(列2) 别名 from 表;
sum 只能处理数字。
如果它的处理目标不是数字,报错。
3. AVG
AVG 可以返回某一列的平均数。
select AVG(列1)/AVG(列2) team_average from 表;
与 SUM 函数相同,AVG 函数只能对数字进行计算。
4. MAX
输出某一列中的最大值。
select max(列1) team_max from 表;
select max(name) team_max from 表;
MAX 可以返回最高的字符串,
即 MAX 既可以处理数值,又可以处理字符。
5. MIN
MIN 与 MAX 类似 它返回一列中的最小数值.
select min(列1) team_min from 表;
select min(name) team_min from 表;
返回名字在字母表中排在最前面的记录
你可以同时使用 MAX 和 MIN 函数以获得数值的界限:
select min(列1) team_min,max(列1) team_max
from 表;
6. VARIANCE
VARIANCE(方差)
select variance(列1) from 表;
VARIANCE 也是一个只应用于数值对象的函数.
7. STDDEV
返回某一列的标准差。
select stddev(列1) from 表;
同样的,对字符列应用该函数时会得到错误信息。
8. 这些统计函数也可以在一个语句中使用
select
count(列1),
avg(列1),
min(列1),
max(),
stddev(列1),
variance(列1),
sum(列1)
from 表;
2. 日期与时间函数
演示表 project :数据类型使用日期型(字段task,startdate,enddate)
1. ADD_MONTHS:该函数的功能是将给定的日期增加一个月。
select task,
startdate,
enddate original_end,
add_months(enddate,2)
from project;
2. LAST_DAY
LAST_DAY 可以返回指定月份的最后一天。
select enddate,LAST_DAY(enddate)
from project;
给出的日期是在闰年的最后一天:
SELECT DISTINCT
LAST_DAY('1-FEB-95') NON_LEAP,LAST_DAY('1-FEB-96') LEAP
FROM PROJECT;
3. MONTHS_BETWEEN
给定的两个日期中有多少个月。
select
task,startdate,enddate,
months _between(Startdate,enddate) duration
from project;
months _between(Startdate,enddate):
开始时间在结束时间之前,结果为负值。
MONTHS_BETWEEN对于你所给出的月份的次序是敏感的,
月份值为负数可能并不是一件坏事.
例如:
你可以利用负值来判断某一日期是否在另一个日期之前下,
将会显示所有在 1995 年 5 月 19 日以前开始的比赛。
select * from
project
where
MONTHS_BETWEEN('19 MAY 95',startdate) > 0;
4. NEW_TIME
调整时间到指定的时区。
select enddate edt,new_time(enddate,'EDT','PDT')
from project;
5. NEXT_DAY
NEXT_DAY:将返回与指定日期在同一个星期或之后一个星期内的,
你所要求的星期天数的确切日期,
如果你想知道你所指定的日期的星期五是几号?
可以这样做:
SELECT STARTDATE NEXT_DAY(STARTDATE,'FRIDAY')
FROM
PROJECT;
输出的结果告诉了你距你所指定的日期最近的星期五的日期.
6. SYSDATE
SYSDATE 将返回系统的日期和时间.
SELECT DISTINCT SYSDATE FROM PROJECT;
如果你想知道在今天你都已经启动了哪些项目( project 表)的话,
你可以输入:
SELECT * FROM PROJECT WHERE STARTDATE SYSDATE;
3. 数学函数
1. ABS
ABS 函数返回给定数字的绝对值。
SELECT ABS(A) ABSOLUTE_VALUE FROM NUMBERS;
2. CEIL 和 FLOOR
CEIL 返回与给定参数相等或比给定参数在的最小整数,
FLOOR 则正好相反,它返回与给定参数相等或比给定参数小的最大整数.
SELECT B,CEIL(B) CEILING FROM NUMBERS;
SELECT A,FLOOR(A) FLOOR FROM NUMBERS;
3. COS、COSH、IN、SINH、TAN、TANH
COS、SIN、TAN 函数可以返回给定参数的三角函数值
默认的参数认定为弧度制。
SELECT A COS(A) FROM NUMBERS;
4. EXP
EXP 将会返回以给定的参数为指数,以 e 为底数的幂值。
select A, EXP(A) from NUMBERS;
5. LN and LOG
这是两个对数函数,其中LN返回给定参数的自然对数。
SELECT A, LN(A) FROM NUMBERS;
SELECT A, LN(ABS(A)) FROM NUMBERS;
注意:你可以将 ABS 函数嵌入到 LN 函数中使用
第二个对数函数需要两个参数,其中第二个参数为底数.
以 10 为底数的B列的对数值。
select B, log(B,10) from NUMBERS;
6. MOD(取余)
查询就返回了 A 与 B 相除后的余数:
SELECT A, B,MOD(A,B) FROM NUMBERS;
7. POWER
该函数可以返回某一个数对另一个数的幂,在使用幂函数时,
第一个参数为底数,第二个指数。
SELECT A,B,POWER(A,B) FROM NUMBERS;
你可能会认为它不允许第一个参数为负数,但这个印象是错误的,
因为像 -4 这样的数是可以做为底数的,
可是,如果第一个参数为负数的话 那么第二个参数就必须是整数,
负数是不能开方的,
对于这个问题可以使用 CEIL 或 FLOOR 函数.
SELECT A,CEIL(B), POWER(A,CEIL(B)) FROM NUMBERS;
8. SIGN
如果参数的值为负数,那么,SIGN 返回 -1;
如果参数的值为正数,那么 SIGN 返回 1 ;
如果参数为零,那么 SIGN 也返回零.
9. SQRT
该函数返回参数的平方根,由于负数是不能开平方的,
所以我们不能将该函数应用于负数.
SELECT A, SQRT(A) FROM NUMBERS;
可以使用绝对值(ABS)解除这一限制
SELECT ABS(A), SQRT(ABS(A)) FROM NUMBERS;
4. 字符函数
1. CHR
该函数返回与所给数值参数等当的字符,
返回的字符取决于数据库所依赖的字符集,
例如示例的数据库采用了 ASCLL 字符集.
示例数据库的代码列的内容为数字.
SELECT CODE,CHR(CODE) FROM CHARACTERS;
2. CONCAT
将两个字符串连接起来。
SELECT CONCAT(FIRSTNAME,LASTNAME)
"FIRST AND LAST NAMES"
FROM CHARACTERS;
注:当用多个词来做为别名时需对它们使用引号,
请检查你的解释器,
看看它是否支持别名.
需要注意的是尽管在看起来输出似乎是两列,
但实际上它仍是一列,
这是因为你所连接的Firstname字段的宽度为 15,
函数取得了该列中的所有数据,
包括其中用以补足宽度的空格.
3. INITCAP
该函数将参数的第一个字母变为大写,此外其它的字母则转换成小写。
SELECT FIRSTNAME BEFORE,INITCAP(FIRSTNAME) AFTER
FROM CHARACTERS;
4. LOWER 和 UPPER
LOWER:将参数转换为全部小写字母而 UPPER 则把参数全部转换成大写字母.
SELECT FIRSTNAME, UPPER(FIRSTNAME),LOWER(FIRSTNAME)
FROM CHARACTERS;
5. LPAD 与 RPAD
这两个函数最少需要两个参数,最多需要三个参数,
每一个参数是需要处理的字符串,
第二个参数是需要将字符串扩充的宽度,
第三个参数表示加宽部分用什么字符来做填补,
第三个参数的默认值为空格,
但也可以是单个的字符或字符串.
向字段中加入了五个字符 该字段的定义宽度为 15:
SELECT LASTNAME,LPAD (LASTNAME,20, '*')
FROM CHARACTERS;
右填充:
SELECT LASTNAME,RPAD(LASTNAME,20, '*')
FROM CHARACTERS;
6. LTRIM 与 RTRIM
LTRIM 和 RTRIM至少需要一个参数,最多允许两个参数,
第一个参数与 LPAD 和 RPAD类似,是一个字符串,
第二个参数也是一个字符或字符串,默认则是空格,
如果第二个参数不是空格的话,
那么该函数将会像剪除空格那样剪除所指定的字符.
SELECT LASTNAME, RTRIM(LASTNAME) FROM CHARACTERS;
可以用下边的语句来确认字符中的空格已经被剪除了
SELECT
LASTNAME,
RPAD(RTRIM(LASTNAME),20,'*')
FROM CHARACTERS;
SELECT
LASTNAME,
LTRIM(LASTNAME,'C')
FROM CHARACTERS;
7. REPLACE
它的工作就如果它的名字所说的那样该,
函数需要三个参数,
第一个参数是需要搜索的字符串,
第二个参数是搜索的内容,
第三个参数则是需要替换成的字符串,
如果第三个参数省略或者是 NULL,
那么将只执行搜索操作而不会替换任何内容.
SELECT LASTNAME,REPLACE(LASTNAME,'ST') A1
FROM CHARACTERS;
如果存在第三个参数,
那么,
在每一个目标字符串中搜索到的内容,
将会被由第三个参数所指定的字符串替换;
SELECT
LASTNAME,
REPLACE(LASTNAME,'ST','**') A1
FROM CHARACTERS;
如果没有第二个参数,
那么只有将源字符串返回而不会执行任何操作.
SELECT
LASTNAME,
REPLACE(LASTNAME,NULL) A1
FROM CHARACTERS;
8. SUBSTR
这个函数有三个参数,允许你将目标字符串的一部分输出。
第一个参数:为目标字符串,
第二个字符:是将要输出的子串的起点,
第三个参数:是将要输出的子串的长度.
SELECT
FIRSTNAME,
SUBSTR(FIRSTNAME,2,3)
FROM CHARACTERS;
注:
如果啊第二个参数为负数,
那么,
将会从原字符串的尾部开始,
向前定位至负数的绝对值的位置.
SELECT
FIRSTNAME,
SUBSTR(FIRSTNAME,-13,2)
FROM CHARACTERS;
注:
因为FIRSTNAME字段的宽度为15,
这也就是为什么参数为-13时,
会从第三个开始的原因,
因为从 15 算起向前算,
第 13 个字符正好是第 3 个字符,
如果没有第三个参数,
将会输出字符串余下的部分.
SELECT
SUBSTR(SSN,1,3) ||'-'||
SUBSTR(SSN,4,2) ||'-'||
SUBSTR(SSN,6,4) SSN
FROM SSN_TABLE;
输出eg;300-54-1110
9. TRANSLATE
这一函数有三个参数,
目标字符串、原字符串和目的字符串,
在目标字符串与原字符串中均出现的字符串,
将会被替换成对应的目的字符串的字符。
SELECT
FIRSTNAME,
TRANSLATE(FIRSTNAME,
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
aaaaaaaaaAAAAAAAAACCCCCCCCC)
FROM
CHARACTERS;
注:这个函数对大小写是敏感的。
10. INSTR
如果需要知道一个字符串中满足特定的内容的位置,
可以使用INSTR,
它的第一个参数是目标字符串,
第二个参数是匹配的内容,
第三和第四个参数是数字,
用以指定开始搜索的起点,
以及指出第几个满足条件的将会被返回。
eg:从字符串的第二个字符开始,
搜索并返回第一个以O开头的字符的位置。
SELECT
LASTNAME,
INSTR(LASTNAME,'O',2,1)
FROM CHARACTERS;
注:默认第三个与第四个参数的数值均为1,
如果第三个数值是负数,
那么,
将会从后往前搜索。
11. LENGTH
LENGTH 将返回指定字符串的长度。
SELECT
FIRSTNAME,
LENGTH(RTRIM(FIRSTNAME))
FROM CHARACTERS;
注意:这里使用了函数 RTRIM,
否则 LENGTH将全部返回 15.
5. 转换函数
转换函数有三个:
可以使你方便的将数据
从一种类型变换成另外一种类型。
1. TO_CHAR
该函数的最初功能是将从一个数字转换为字符型,
不同的解释器可能会使用它来转换其他数据类型
例如,日期转换为字符型,
或者拥有更多的参数。
SELECT
TESTNUM,
TO_CHAR(TESTNUM)
FROM CONVERT;
2. TO_NUMBER
该函数与TO_CHAR函数相对应,
显而易见,它是将一个字符串型数字转换为数值型。
SELECT NAME,
TESTNUM,
TESTNUM*TO_NUMBER(NAME)
FROM CONVERT;
注:如果函数没有将NAME转换为数值,
将会返回一个错误信息。
6. 其他函数
1. GREATEST 与 LEAST
这两个函数返回几个表达式中最大和最小的.
SELECT
GREATEST('ALPHA','BRAVO','FOXTROT','DELTA')
FROM CONVERT;
注:GREATEST 将会返回字母表中最靠后的字符开头的字符串,
虽然看起来似乎没有必要使用 FROM 子句,
可是如果 FROM 子句没有的话,
你将会收到一个错误信息。
每一个SELECT语句都需要FROM子句,
给定的行数为n,
则结果返回三个。
SELECT LEAST(3,546,58,42 100)
FROM CONVERT;
2. USER
该函数返回当前使用数据库的用户的名字。
SELECT USER FROM CONVERT;
7. 总结
根据工作需要去学习函数;
回顾+练习。。。。
以上是关于2. SQL函数:对数据的进一步处理的主要内容,如果未能解决你的问题,请参考以下文章