Oracle--SQL函数包括:单行函数,多行函数
一. 字符函数(转换函数,字符操纵函数)
1 转换函数:lower(将字符串大写转小写),upper(小写转大写),initcap(将一个单词的的首字母转换成大写)
lower
SQL> select lower(name) from test1;
LOWER(NAME)
--------------------
张学友
xingxing
田月星
田月超
田月星
yuechaotian
李连杰
SQL> select name from test1 where name='xingxing';
NAME
--------------------
xingxing
SQL> select name from test1 where name='XINGXING';
未选定行
SQL> select name from test1 where name=lower('XINGXING');
NAME
--------------------
xingxing
upper
SQL> select upper(name) from test1;
UPPER(NAME)
--------------------
张学友
XINGXING
田月星
田月超
田月星
YUECHAOTIAN
李连杰
initcap
SQL> select initcap(name) from test1;
INITCAP(NAME)
--------------------
张学友
Xingxing
田月星
田月超
田月星
Yuechaotian
李连杰
2 字符操纵函数:concat(将两个字符串连接),substr(取字串函数),length(取字符串的长度),instr(某一个字符在字符串的位置上返回一个位置值),lpad(将字符串按某种模式来显示)
concat
SQL> select concat(id,name) from test1;
CONCAT(ID,NAME)
----------------------------------------
1张学友
2xingxing
3田月星
4田月超
5田月星
6yuechaotian
8
2李连杰
已选择8行。
也可以用字符串连接符号‘||’来实现相同的功能
SQL> select id||name from test1;
ID||NAME
---------------------------------
1张学友
2xingxing
3田月星
4田月超
5田月星
6yuechaotian
8
2李连杰
已选择8行。
substr
SQL> select substr(name,1,2) from test1;
SUBS
----
张学
xi
田月
田月
田月
yu
李连
已选择8行。
length
SQL> select length(name) from test1;
LENGTH(NAME)
------------
3
8
3
3
3
11
3
已选择8行。
length函数将汉字等同于一个英文字母,一个汉字相当于一个字符,
因为Oracle中不管是汉字还是英文字母都是按照两个字节来存储的。
instr
SQL> select name,instr(name,'x') from test1;
NAME INSTR(NAME,'X')
-------------------- ---------------
张学友 0
xingxing 1
田月星 0
田月超 0
田月星 0
yuechaotian 0
李连杰 0
已选择8行。
SQL> select name,instr(name,'月') from test1;
NAME INSTR(NAME,'月')
-------------------- ----------------
张学友 0
xingxing 0
田月星 2
田月超 2
田月星 2
yuechaotian 0
李连杰 0
已选择8行。
lpad
SQL> select lpad(id,5,'0'),name from test1;
LPAD(ID,5, NAME
---------- --------------------
00001 张学友
00002 xingxing
00003 田月星
00004 田月超
00005 田月星
00006 yuechaotian
00008
00002 李连杰
已选择8行。
二. number函数
round(返回四舍五入的值),trunc(截取小数),mod(求余运算)
round
SQL> select round(35.345,2),round(35.345,0),round(35.345,-1) from test1;
ROUND(35.345,2) ROUND(35.345,0) ROUND(35.345,-1)
--------------- --------------- ----------------
35.35 35 40
35.35 35 40
35.35 35 40
35.35 35 40
35.35 35 40
35.35 35 40
35.35 35 40
35.35 35 40
已选择8行。
请注意round函数中四舍五入的位置
trunc
SQL> select trunc(35.345,2),trunc(35.345,0),trunc(35.345,-1) from test1;
TRUNC(35.345,2) TRUNC(35.345,0) TRUNC(35.345,-1)
--------------- --------------- ----------------
35.34 35 30
35.34 35 30
35.34 35 30
35.34 35 30
35.34 35 30
35.34 35 30
35.34 35 30
35.34 35 30
已选择8行。
mod
SQL> select mod(1600,300) from test1;
MOD(1600,300)
-------------
100
100
100
100
100
100
100
100
已选择8行。
三. 使用日期型函数
Oracle内部存储的格式是:
century,year,month,day,hours,minutes,seconds
默认的日期格式:DD-MON-YY
sysdate 函数能够返回日期和时间
dual 是用来显示日期的名义表
sysdate
SQL> select sysdate from test1;
SYSDATE
--------------
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
已选择8行。
sysdate不加任何参数就是返回系统当前的日期
SQL> select sysdate now from test1;
NOW
--------------
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
16-5月 -09
已选择8行。
dual名义表
SQL> select sysdate now from dual;
NOW
--------------
16-5月 -09
SQL> alter session set nls_date_format='YYYY-MM-DD';
会话已更改。
SQL> select sysdate from dual;
SYSDATE
----------
2009-05-16
查看dual表的结构
SQL> desc dual;
名称 是否为空? 类型
----------------------------------------- -------- --------------
DUMMY VARCHAR2(1)
Oracle中不允许SQL语句中少from
SQL> select sysdate();
select sysdate()
*
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字
所以Oracle提供了名义表。
四.日期函数
months_between(返回两个日期之间月份的差值)
add_months(在日期上加上月份数)
next_day(指定日期的后一天)
last_day(月份中最后一天)
round(四舍五入日期)
trunc(截断日期)
months_between
SQL> select months_between('2009-5-16','2007-10-10') from dual;
MONTHS_BETWEEN('2009-5-16','2007-10-10')
----------------------------------------
19.1935484
add_months
SQL> select add_months('2009-5-16',12) from dual;
ADD_MONTHS
----------
2010-05-16
next_day
SQL> select next_day('2009-5-16','星期一') from dual;
NEXT_DAY('
----------
2009-05-18
last_day
SQL> select last_day('2009-5-16') from dual;
LAST_DAY('
----------
2009-05-31
Author:yuexingtian
2009-05-16
yuexingtian