oracle 10g 学习手册(4)SQL函数的运用与解析
听说hays的风要从现在刮到来年春天后,我就再也不敢出门了,于是就做在这里写点东西。
这次我们来分析并学会运用sql的各种查询函数。
其实sql函数才是查询的利器,它包罗万象,从总体上分为单行查询和多行查询。举个例子:
SELECT LOWER(last_name)
FROM employees;
这就是单行查询函数,说他单行并不是因为它返回的查询结果只有一行,而是说函数的运算只针对某一行的某个字段,是一条一条处理的。
这个例子就是把last_name中的名字转换成小写字母,很显然它是一个名字一个名字的转换,而不是一组或者一批量的转换。
在看这个例子:
SELECT SUM(salary)
FROM employees;
这个例子就是把salary这一列(字段)求和。这个函数就属于多行查询了。很显然它把salary这一列求了和。明白什么是单行查询函数(single-row function)和 多行查询函数(group function)了吧?
下面我们就来逐个了解SQL函数的使用和规则。
因为SQL函数数量巨大,我一天还写不完,可能会分成多次逐一分析,请大家见谅
(一) 字符函数 (character functions)
首先我在这里列出所有的字符函数:
LOWER()
UPPER()
INITCAP()
CONCAT()
SUBSTR()
LENGTH()
INSTR()
LPAD()
RPAD()
TRIM()
REPLACE()
这里就是基本上所有的字符函数了,我们一个一个的分析他们的作用和使用方法:
看如下例子,我们将用同样的语句来表现每一个函数的功能,大家一定要仔细观察分析,否则很容易弄错。
SELECT
LOWER(last_name)
FROM employees;
LOWER() :将所有字母变成小写,这里是把last_name 这一列变小写后输出。注意,也可以单独转换一个词为小写,比如:LOWER(’NEIL’)-------neil
SELECT
UPPER(last_name)
FROM employees;
UPPER() :同上,变大写用的。
SELECT
INITCAP(last_name)
FROM employees;
这个函数比较有意思,他是把一组字母的第一个变为大写,其余的变小写。
比如:INITCAP(‘NEIL’)---------------Neil
SELECT
CONCAT(last_name, salary)
FROM employees;
这个函数的作用就是把2个部分的结果连接起来输出,和我们以前讲到的||符号很相似输出的结果就是:CONCAT(‘HELLO’, ’WORLD’)-----------------HELLOWORLD
SELECT
SUBSTR(last_name, 1, 5)
FROM employees;
这个函数的作用就是定义一个搜索范围,并按范围输出,比如:
SUBSTR(‘HELLOWORLD’, 1, 5)--------------------HELLO 表示从第一个字母开始搜索到第五个于是就输出hello了。呵呵
SELECT
INSTR(last_name, ‘A’)
FROM employees;
这个函数的作用是查对象中字母a 是第几个字母。
比如:INSTR(‘HELLOWORLD’, ‘W’)--------------------------6
SELECT
LPAD(last_name, 10
,
’*’)
FROM employees;
这个函数的用途是按照指定的位数输出,空余位用你指定的符号的填补,并且右对齐。
例如:LPAD(salary, 10, ‘*’)-------------------------*******100
SELECT
RPAD(last_name, 10
,
’*’)
FROM employees;
这个函数的作用和上面一样,只不过是数据左对齐。
例如:RPAD(salary, 10, ‘*’)------------------------100*******
SELECT
REPLACE(last_name, ‘J’
,
’NEIL’)
FROM employees;
这个函数就是替换函数,用于把只定的字母替换成你想要的字母例如:
REPLACE(‘JACK AND JINE’, ‘J’, ‘HELLO’)---------HELLOACK AND HELLOINE 就是把字母j, 替换成了hello
SELECT
TRIM(‘H’ FROM last_name)
FROM employees;
这个函数的作用就是把制定对象的一个字母删除。例如:
Trim(‘h’ from ‘hellowold’)---------------------elloword
到这里所有的字符操作函数就说完了。注意我给出的完整例子,都是针对一个完整列进行操作的,但仍然是single-row function单行查询函数。
(二) 数字函数
数字函数,顾名思义,针对数字进行操作的函数
我们先来看都有哪些数字函数然后再逐一解析。
ROUND()
TRUNC()
MOD()
解析:
ROUND()根据四舍五入的原则保留数字的位数
例如:ROUND(45.837,2)-------------------45.84
这个例子就是保留小数点后面2位。若ROUND(45.837),则系统默认为保留到个位,结果也就是46。如果是ROUND(45.837,-1),则表示为保留到整数位的第二位,结果也是50了。
TRUNC(),不使用四舍五入的原则来保留数字的位数,他跟round()的唯一区别就是不用四舍五入的原则
例如:TRUNC(93.338, 2)---------------93.33
大家可以看到,他保留小数点后面2位,但是没有四舍五入。如果TRUNC(93.638)则结果是93,如TRUNC(96.338, -1)结果是90。大家多体会一下就可以了。
我们可以看一个实际的例子:
SELECT ROUND(45.923,2),
ROUND(45.923, 0), ROUND(45.923, -1)
FROM DUAL;
注意,DUAL表示oracle系统自带的表,并能被所有用户访问。他饱含了一个列和一个饱含x的行,可以用来查询并返回你需要的数字,这通常是用来验证Sql语法的。并没有什么实际的用途。
MOD()这个函数比较简单,就是求余数的函数
例如:MOD(1600,300)----------100
就是用1600/300算出余数是100。