Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377272
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: Oracle

2009-05-16 09:52:10

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
阅读(2242) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~