文档视界 最新最全的文档下载
当前位置:文档视界 › ORACLE常用的函数

ORACLE常用的函数

ORACLE常用的函数
ORACLE常用的函数

ORACLE常用函数

ORACLE常用数值函数转换函数字符串函数介绍。

数值函数:

abs(m)m的绝对值

mod(m,n)m被n除后的余数

power(m,n)m的n次方

round(m[,n])m四舍五入至小数点后n位的值(n缺省为0)

trunc(m[,n])m截断n位小数位的值(n缺省为0)

--------------------------------------------------------------------------------

字符函数:

initcap(st)返回st将每个单词的首字母大写,所有其他字母小写

lower(st)返回st将每个单词的字母全部小写

upper(st)返回st将每个单词的字母全部大写

concat(st1,st2)返回st为st2接st1的末尾(可用操作符"||")

lpad(st1,n[,st2]) 返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格

rpad(st1,n[,st2]) 返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格

ltrim(st[,set]) 返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

rtrim(st[,set]) 返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

replace(st,search_st[,replace_st]) 将每次在st中出现的search_st用replace_st 替换,返回一个st。缺省时,删除search_st

substr(st,m[,n]) n=返回st串的子串,从m位置开始,取n个字符长。缺省时,一直返回到st末端

length(st) 数值,返回st中的字符数

instr(st1,st2[,m[,n]]) 数值,返回st1从第m字符开始,st2第n次出现的位置,m 及n的缺省值为1

例:

1.

select initcap('THOMAS'),initcap('thomas') from test;

initca initca

------ ------

Thomas Thomas

2.

select concat('abc','def') "first" from test;

first

-----

abcdef

3.

select 'abc'||' '||'def' "first" from test;

first

-----

abc def

4.

select lpad(name,10),rpad(name,5,'*') from test;

lpad(name,10) rpad(name,5,'*')

------------ ----------------

mmx mmx**

abcdef abcde

5.

去掉地址字段末端的点及单词st和rd

select rtrim(address,'. st rd') from test

6.

select name,replace(name,'a','*') from test;

name replace(name,'a','*')

---- ---------------------

great gre*t

7.

select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;

a b

------- -------

bald bear bearisol

8.

select name,instr(name,' ') a,instr(name,' ',1,2) b from test;

name a b

------- -------- ---------

li lei 3 0

l i l 2 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

转换函数:

nvl(m,n)如果m值为null,返回n,否则返回m

to_char(m[,fmt])m从一个数值转换为指定格式的字符串fmt缺省时,fmt值的宽度正好能容纳所有的有效数字

to_number(st[,fmt])st从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数

附:

to_char()函数的格式:

---------------------------------

符号说明

---------------------------------

9 每个9代表结果中的一位数字

0 代表要显示的先导0

$ 美元符号打印在数的左边

L 任意的当地货币符号

. 打印十进制的小数点

, 打印代表千分位的逗号

---------------------------------

例:

1.

select to_number('123.45')+to_number('234.56') form test;

to_number('123.45')+to_number('234.56')

----------------------------------------

358.01

2.

select to_char(987654321) from test;

to_char(987654321)

------------------

987654321

3.

select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(987 4321,'$9,999,999') c from test;

a b c

------- ---------- -----------

$123 $54,321 $9,874,321

4.

select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to _char(1.1,'999,999.999') from test;

a b c

--------- ---------- ------------

1,234.123 .457 1.100

--------------------------------------------------------------------------------

分组函数:

avg([distinct/all] n) 列n的平均值

count([all] *) 返回查询范围内的行数包括重复值和空值

count([distinct/all] n) 非空值的行数

max([distinct/all] n) 该列或表达式的最大值

min([distinct/all] n) 该列或表达式的最小值

stdev([distinct/all] n) 该列或表达式的标准偏差,忽略空值

sum([distinct/all] n) 该列或表达式的总和

variance([distinct/all] n) 该列或表达式的方差,忽略空值

--------------------------------------------------------------------------------

日期函数:

add_months(d,n) 日期d加n个月

last_day(d) 包含d的月份的最后一天的日期

month_between(d,e) 日期d与e之间的月份数,e先于d

new_time(d,a,b) a时区的日期和时间d在b时区的日期和时间

next_day(d,day) 比日期d晚,由day指定的周几的日期

sysdate 当前的系统日期和时间

greatest(d1,d2,...dn) 给出的日期列表中最后的日期

least(d1,k2,...dn) 给出的日期列表中最早的日期

to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串

to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式

round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期

trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期

附:

日期格式:

--------------------------------

格式代码说明举例或可取值的范围

--------------------------------

DD 该月某一天1-3

DY 三个大写字母表示的周几SUN,...SAT

DAY 完整的周几,大写英文SUNDAY,...SATURDAY

MM 月份1-12

MON 三个大写字母表示的月份JAN,...DEC

MONTH 完整JANUARY,...DECEMBER

RM 月份的罗马数字I,...XII

YY或YYYY 两位,四位数字年

HH:MI:SS 时:分:秒

HH12或HH24 以12小时或24小时显示

MI 分

SS 秒

AM或PM 上下午指示符

SP 后缀SP要求拼写出任何数值字段

TH 后缀TH表示添加的数字是序数4th,1st

FM 前缀对月或日或年值,禁止填充

---------------------------------

例:

1.

下一个周五的日期

select next_day(sysdate,6) from test;

2.

两个月前的今天的日期

select add_months(sysdate,-2) from test;

Oracle常用函数列表速查

PL/SQL单行函数和组函数详解

函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:

单行函数

组函数

本文将讨论如何利用单行函数以及使用规则。

SQL中的单行函数

SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。

SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)

单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE 子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT语句中。

NULL和单行函数

在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值,算术*作符的任何一个*作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则返回x1。

下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿

column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2

不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:

update empset salary=(salary+bonus)*1.1

这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即 salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。

所以正确的语句是:

update empset salary=(salary+nvl(bonus,0)*1.1

单行字符串函数

单行字符串函数用于*作字符串数据,他们大多数有一个或多个参数,其中绝大多数返回字符串

ASCII()

c1是一字符串,返回c1第一个字母的ASCII码,他的逆函数是CHR()

SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122

CHR(<i>)[NCHAR_CS]

i是一个数字,函数返回十进制表示的字符

select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B

CONCAT(,)

c1,c2均为字符串,函数将c2连接到c1的后面,如果c1为null,将返回c2.如果c2为null,则返回c1,如果c1、c2都为null,则返回null。他和*作符||返回的结果相同

select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda

INITCAP()

c1为一字符串。函数将每个单词的第一个字母大写其它字母小写返回。单词由空格,控制字符,标点符号限制。

select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici

INSTR(,[,<i>[,]])

c1,c2均为字符串,i,j为整数。函数返回c2在c1中第j次出现的位置,搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数,那么搜索将从右到左进行,但是位置的计算还是从左到右,i和j的缺省值为1.

select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select

INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2

INSTRB(,[,i[,j])

与INSTR()函数一样,只是他返回的是字节,对于单字节INSTRB()等于INSTR()

LENGTH()

c1为字符串,返回c1的长度,如果c1为null,那么将返回null值。

select LENGTH('Ipso Facto') ergo from dualergo10

LENGTHb()

与LENGTH()一样,返回字节。

lower()

返回c的小写字符,经常出现在where子串中

select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE

'%white%'COLORNAMEWinterwhite

LPAD(,<i>[,])

c1,c2均为字符串,i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。c2的缺省值为单空格,参见RPAD。

select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe

LTRIM(,)

把c1中最左边的字符去掉,使其第一个字符不在c2中,如果没有c2,那么c1就不会改变。select LTRIM('Mississippi','Mis') from dualLTRppi

RPAD(,<i>[,])

在c1的右侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。c2的缺省值为单空格,其他与LPAD相似

RTRIM(,)

把c1中最右边的字符去掉,使其第后一个字符不在c2中,如果没有c2,那么c1就不会改变。

REPLACE(,[,])

c1,c2,c3都是字符串,函数用c3代替出现在c1中的c2后返回。

select REPLACE('uptown','up','down') from dualREPLACEdowntown

STBSTR(,<i>[,])

c1为一字符串,i,j为整数,从c1的第i位开始返回长度为j的子字符串,如果j为空,则直到串的尾部。

select SUBSTR('Message',1,4) from dualSUBSMess

SUBSTRB(,<i>[,])

与SUBSTR大致相同,只是I,J是以字节计算。

SOUNDEX()

返回与c1发音相似的词

select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250

TRANSLATE(,,)

将c1中与c2相同的字符以c3代替

select TRANSLATE('fumble','uf','ar') test from dualTEXTramble

TRIM([[]] from c3)

将c3串中的第一个,最后一个,或者都删除。

select TRIM(' space padded ') trim from dual TRIMspace padded

UPPER()

返回c1的大写,常出现where子串中

select name from dual where UPPER(name) LIKE 'KI%'NAMEKING

单行数字函数

单行数字函数*作数字数据,执行数学和算术运算。所有函数都有数字参数并返回数字值。所有三角函数的*作数和值都是弧度而不是角度,oracle没有提供内建的弧度和角度的转换函数。

ABS()

返回n的绝对值

ACOS()

反余玄函数,返回-1到1之间的数。n表示弧度

select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0

ASIN()

反正玄函数,返回-1到1,n表示弧度

ATAN()

反正切函数,返回n的反正切值,n表示弧度。

CEIL()

返回大于或等于n的最小整数。

COS()

返回n的余玄值,n为弧度

COSH()

返回n的双曲余玄值,n 为数字。

select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847

EXP()

返回e的n次幂,e=2.71828183.

FLOOR()

返回小于等于N的最大整数。

LN()

返回N的自然对数,N必须大于0

LOG(,)

返回以n1为底n2的对数

MOD()

返回n1除以n2的余数,

POWER(,)

返回n1的n2次方

ROUND(,)

返回舍入小数点右边n2位的n1的值,n2的缺省值为0,这回将小数点最接近的整数,如果n2为负数就舍入到小数点左边相应的位上,n2必须是整数。

select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2)

ROUND(12345.54321,2)12300 12345.54

SIGN()

如果n为负数,返回-1,如果n为正数,返回1,如果n=0返回0.

SIN()

返回n的正玄值,n为弧度。

SINH()

返回n的双曲正玄值,n为弧度。

SQRT()

返回n的平方根,n为弧度

TAN()

返回n的正切值,n为弧度

TANH()

返回n的双曲正切值,n为弧度

TRUNC(,)

返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。

单行日期函数

单行日期函数*作DATA数据类型,绝大多数都有DATA数据类型的参数,绝大多数返回的也是DATA数据类型的值。

ADD_MONTHS(,<i>)

返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数,那么数据库将隐式的他转换成整数,将会截去小数点后面的部分。

LAST_DAY()

函数返回包含日期d的月份的最后一天

MONTHS_BETWEEN(,)

返回d1和d2之间月的数目,如果d1和d2的日的日期都相同,或者都使该月的最后一天,那么将返回一个整数,否则会返回的结果将包含一个分数。

NEW_TIME(,,)

d1是一个日期数据类型,当时区tz1中的日期和时间是d时,返回时区tz2中的日期和时间。tz1和tz2时字符串。

NEXT_DAY(,)

返回日期d后由dow给出的条件的第一天,dow使用当前会话中给出的语言指定了一周中的某一天,返回的时间分量与d的时间分量相同。

select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004

ROUND([,])

将日期d按照fmt指定的格式舍入,fmt为字符串。

SYADATE

函数没有参数,返回当前日期和时间。

TRUNC([,])

返回由fmt指定的单位的日期d.

单行转换函数

单行转换函数用于*作多数据类型,在数据类型之间进行转换。

CHARTORWID()

c 使一个字符串,函数将c转换为RWID数据类型。

SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')

CONVERT(,[,])

c尾字符串,dset、sset是两个字符集,函数将字符串c由sset字符集转换为dset字符集,sset 的缺省设置为数据库的字符集。

HEXTORAW()

x为16进制的字符串,函数将16进制的x转换为RAW数据类型。

RAWTOHEX()

x是RAW数据类型字符串,函数将RAW数据类转换为16进制的数据类型。

ROWIDTOCHAR()

函数将ROWID数据类型转换为CHAR数据类型。

TO_CHAR([[,)

x是一个data或number数据类型,函数将x转换成fmt指定格式的char数据类型,如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。如果x为数字

nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符,以及货币符号。

NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"

TO_DATE([,[,)

c表示字符串,fmt表示一种特殊格式的字符串。返回按照fmt格式显示的c,nlsparm表示使用的语言。函数将字符串c转换成date数据类型。

TO_MULTI_BYTE()

c表示一个字符串,函数将c的担子截字符转换成多字节字符。

TO_NUMBER([,[,)

c表示字符串,fmt表示一个特殊格式的字符串,函数返回值按照fmt指定的格式显示。nlsparm表示语言,函数将返回c代表的数字。

TO_SINGLE_BYTE()

将字符串c中得多字节字符转化成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用

其它单行函数

BFILENAME(

,)

dir是一个directory类型的对象,file为一文件名。函数返回一个空的BFILE位置值指示符,函数用于初始化BFILE变量或者是BFILE列。

DECODE(,,[,,,[])

x是一个表达式,m1是一个匹配表达式,x与m1比较,如果m1等于x,那么返回r1,否则,x与m2比较,依次类推m3,m4,m5....直到有返回结果。

DUMP(,[,[,[,]]])

x是一个表达式或字符,fmt表示8进制、10进制、16进制、或则单字符。函数返回包含了有关x 的内部表示信息的VARCHAR2类型的值。如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。

EMPTY_BLOB()

该函数没有参数,函数返回一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB 列。

EMPTY_CLOB()

该函数没有参数,函数返回一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB 列。

GREATEST()

exp_list是一列表达式,返回其中最大的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,那么返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。

LEAST()

exp_list是一列表达式,返回其中最小的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,将返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。

UID

该函数没有参数,返回唯一标示当前数据库用户的整数。

USER

返回当前用户的用户名

USERENV()

基于opt返回包含当前会话信息。opt的可选值为:

ISDBA 会话中SYSDBA脚色响应,返回TRUE

SESSIONID 返回审计会话标示符

ENTRYID 返回可用的审计项标示符

INSTANCE 在会话连接后,返回实例标示符。该值只用于运行Parallel 服务器并且有多个实例的情况下使用。

LANGUAGE 返回语言、地域、数据库设置的字符集。

LANG 返回语言名称的ISO缩写。

TERMINAL 为当前会话使用的终端或计算机返回*作系统的标示符。

VSIZE()

x是一个表达式。返回x内部表示的字节数。

SQL中的组函数

组函数也叫集合函数,返回基于多个行的单一结果,行的准确数量无法确定,除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是,在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.

组(多行)函数

与单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数可以在select或select 的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。

AVG([{DISYINCT|ALL}])

返回数值的平均值。缺省设置为ALL.

SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL)

AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413

COUNT({*|DISTINCT|ALL} )

返回查询中行的数目,缺省设置是ALL,*表示返回所有的行。

MAX([{DISTINCT|ALL}])

返回选择列表项目的最大值,如果x是字符串数据类型,他返回一个VARCHAR2数据类型,如果X是一个DATA数据类型,返回一个日期,如果X是numeric数据类型,返回一个数字。注意distinct和all 不起作用,应为最大值与这两种设置是相同的。

MIN([{DISTINCT|ALL}])

返回选择列表项目的最小值。

STDDEV([{DISTINCT|ALL}])

返回选者的列表项目的标准差,所谓标准差是方差的平方根。

SUM([{DISTINCT|ALL}])

返回选择列表项目的数值的总和。

VARIANCE([{DISTINCT|ALL}])

返回选择列表项目的统计方差。

用GROUP BY给数据分组

正如题目暗示的那样组函数就是*作那些已经分好组的数据,我们告诉数据库用GROUP BY怎样给数据分组或者分类,当我们在SELECT语句的SELECT子句中使用组函数时,我们必须把为分组或非常数列放置在GROUP BY子句中,如果没有用group by进行专门处理,那么缺省的分类是将整个结果设为一类。select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982

在这个例子中,我们用state字段分类;如果我们要将结果按照zip_codes排序,可以用ORDER BY语句,ORDER BY子句可以使用列或组函数。

select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982

用HAVING子句限制分组数据

现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数,组函数只能用于两个子串中,组函数不能用于WHERE子串中,例如下面的查询是错误的:

错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk

这个语句中数据库不知道SUM()是什么,当我们需要指示数据库对行分组,然后限制分组后的行的输出时,正确的方法是使用HAVING语句:

SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;

嵌套函数

函数可以嵌套。一个函数的输出可以是另一个函数的输入。*作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF....THEN...ELSE的函数。

嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中。比如下面的例子:

SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2

Oracle中分析函数用法小结

Oracle中分析函数用法小结 一.分析函数适用场景: ○1需要对同样的数据进行不同级别的聚合操作 ○2需要在表内将多条数据和同一条数据进行多次的比较 ○3需要在排序完的结果集上进行额外的过滤操作 二.分析函数语法: FUNCTION_NAME(,...) OVER () 例: sum(sal) over (partition by deptno order by ename) new_alias sum就是函数名 (sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm) over 是一个关键字,用于标识分析函数,否则查询分析器不能区别sum()聚集函数和sum()分析函数 partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的大区 order by ename 是可选的order by 子句,有些函数需要它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要.在使用了任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的. 1)FUNCTION子句 ORACLE提供了26个分析函数,按功能分5类 分析函数分类 等级(ranking)函数:用于寻找前N种查询 开窗(windowing)函数:用于计算不同的累计,如SUM,COUNT,AVG,MIN,MAX等,作用于数据的一个窗口上 例: sum(t.sal) over (order by t.deptno,t.ename) running_total, sum(t.sal) over (partition by t.deptno order by t.ename) department_total 制表(reporting)函数:与开窗函数同名,作用于一个分区或一组上的所有列 例: sum(t.sal) over () running_total2, sum(t.sal) over (partition by t.deptno) department_total2 制表函数与开窗函数的关键不同之处在于OVER语句上缺少一个ORDER BY子句! LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常有用的. VAR_POP,VAR_SAMP,STDEV_POPE及线性的衰减函数:计算任何未排序分区的统计值 2)PARTITION子句 按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组 3)ORDER BY子句

Oracle 常见函数(一)——数值函数

Oracle常见数值函数 ----***特别说明***: x 可以是纯的数值,也可以是数值型表达式/* ABS(x)返回x绝对值 eg. */ selectabs(100),abs(-100) from dual; /* sign(x)判断x的正负,正数返回1,负数返回-1,0返回0; eg. */ selectsign(100),sign(-100),sign(0) from dual;

/* round(x[,n])对x进行四舍五入,保留n位小数,其中n采用其整数部分; 没有n时默认四舍五入到整数位,n为负数时,四舍五入保留小数点左边n位(补零), eg. */ selectround(5555.6666, 2.1), round(5555.6666, -2.6), round(5555.6666) from dual; /* trunc(x)对x进行直接截取,保留n位小数,其中n采用其整数部分; 没有n时默认截取到整数位,n为负数时,截取保留小数点左边n位(补零), eg. */ selecttrunc(5555.66666,2.1), trunc(5555.66666,-2.6), trunc(5555.033333) from dual; /* ceil(x)对x进行向上取整,返回不小于x的最小整数(可以是整数x本身)。

eg. */ selectceil(3.1), ceil(2.8+1.3), ceil(0) from dual; /* floor(x)对x进行向下取整,返回不大于x的最大整数(可以是整数x本身)。eg. */ selectfloor(3.1), floor(2.8+1.3), floor(0) from dual; /* mod(x,y)求x除以y的余数,x,y为数字型表达式。 eg. */ selectmod(23,8),mod(24,8) from dual;

oracle函数

许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle、SQL Server、DB2)的应用程序的重要性,它可以让客户们选择自己习惯的平台。一般来说,软件开发人员都能够识别出他们的负责数据库维护的客户,和必须使用现有平台和个性化的客户。 关于Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。 定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库,想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的,这是一家志愿者成员的组织(用私人基金运转),他们在有关设备和程序等广泛领域内开发了国家承认的标准。在数据库领域, ANSI定义了编写SQL命令的标准,假设命令可以运行在任何的数据库上,而不需要更改命令的语法。 ODBC是开放数据库连接(ODBC)接口,微软定义的,它可以让应用程序访问数据库管理系统(DBMS)中的数据,使用SQL作为访问数据的标准。 ODBC允许最大的互联性,这意味着一个单个的应用程序可以访问不同的数据库管理系统。然后,应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上。 OLE DB 是ODBC的继承者,是一组允许例如基于VB、C++、Access等任何可以连接到类似SQL Server、Oracle、DB2、MySQL等后台的“前台”的软件组件。在许多种情况下,OLE DB组件都比原有的ODBC提供了好得多的性能。 JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库,SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间,进行不依赖于数据库的连接的行业标准。JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口。真实世界中的通用接口不幸的是,并不是所有数据库级别的命令都是ANSI,每个数据库平台都有自己的扩展功能。对于ANSI或者通用接口,一般来说都代表着几本功能,因此也可能意味着丧失了性能方面的竞争力。对于小型数据库和小型应用程序来说,要维护对数据库的通用访问是简单的,但是当数据库和/或应用程序变得越来越大,越来越复杂,你就不得不向代码中添加功能。 SQL Server和Oracle的常用函数对比 ---------数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual

oracle中常用函数大全

oracle中常用函数大全 1、数值型常用函数 函数返回值样例显示 ceil(n) 大于或等于数值n的最小整数select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数select ceil(10.6) from dual; 10 mod(m,n) m除以n的余数,若n=0,则返回m select mod(7,5) from dual; 2 power(m,n) m的n次方select power(3,2) from dual; 9 round(n,m) 将n四舍五入,保留小数点后m位select round(1234.5678,2) from dual; 1234.57 sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1 select sign(12) from dual; 1 sqrt(n) n的平方根select sqrt(25) from dual ; 5 2、常用字符函数 initcap(char) 把每个字符串的第一个字符换成大写select initicap('mr.ecop') from dual; Mr.Ecop lower(char) 整个字符串换成小写select lower('MR.ecop') from dual; mr.ecop replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from dual; Boycott substr(char,m,n) 取出从m字符开始的n个字符的子串select substr('ABCDEF',2,2) from dual; CD length(char) 求字符串的长度select length('ACD') from dual; 3 || 并置运算符select 'ABCD'||'EFGH' from dual; ABCDEFGH 3、日期型函数 sysdate当前日期和时间select sysdate from dual;

Oracle常用函数及使用案例(珍藏版)

Oracle常用函数及使用案例(珍藏版) 一:sql函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char,m,n):取字符串的字串。 案例1.将所有员工的名字按小写的方式显示 select lower(ename),sal from emp; 案例2.将所有员工的名字按大写的方式显示。 select upper(ename),sal from emp; 案例3.显示正好为五个字符的的员工的姓名。 select * from emp where length(ename)=5; 案例4.显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;//从名字的第一个字符开始取,向后取三个字符。 案例5.以首字母为大写的方式显示所有员工的姓名。 (1)首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp; 案例6.以首字母为小写的方式显示所有员工的姓名。(需要有较高的灵活度,细心分析和清晰思路) (1)首字母小写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母大写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp; 案例7.函数(替换):replace(char1,search_string,replace_string); 显示所有员工的姓名,用“我要替换A”替代所有“A”。 select replace(ename,'A','我是老鼠')from emp; 案例8.以首字母为小写的方式显示所有员工的姓名。 select replace(ename,substr(ename,1,1),lower(substr(ename,1,1)))from emp; 案例9.以首字母为大写的方式显示所有员工的姓名。 Select replace(ename,substr(ename,2,length(ename)-1),lower(substr(ename,2,length(ename) -1)))from emp; 二:数学函数:(在财务中用的比较多) ronud(sal)用于四舍五默认取整; ronud(sal,1)用于四舍五留一位小数。 trunc(sal)取整,忽略小数。截去小数部分。 trunc(sal,1)截取;小数点留一位,之后的右边的省去。 trunc(sal,-1)截取;只留整数,个位数取零。 floor(sal)向下最接近取整;比如1.1值为1.

Oracle函数详解(经典)

Oracle常用函数/过程说明主要介绍Oracle的系统函数、过程和包。 SQL常用函数: 数值函数: ABS Purpose 返回绝对值 Returns the absolute value of n. Example SELECT ABS(-15) "Absolute" FROM DUAL; Absolute ---------- 15 CEIL Purpose 取最小整数 Returns smallest integer greater than or equal to n. Example SELECT CEIL(15.7) "Ceiling" FROM DUAL;

Ceiling ---------- 16 * MOD Syntax MOD(m,n) Purpose 取余 Returns remainder of m divided by n. Returns m if n is 0. Example SELECT MOD(11,4) "Modulus" FROM DUAL; Modulus ---------- 3 * ROUND Syntax ROUND(n[,m]) Purpose 取四舍五入信息 Returns n rounded to m places right of the decimal point; if m is omitted, to 0 places. m can be negative to round off digits left of the decimal point. m must be an integer.

oracle数据库之常用的函数练习

/*此文章可以作为sql脚本直接运行,某些函数限于oracle数据库!前面建表和数据插入可以不看,直接看后面红色部分的代码,前面的表只是提供一些数据供大家练习,不用自己再去建表了,真正的内容在后面*/ --人员表 create table person( personID number , pname varchar2(20) constraint NN_pname not null, psex char(2) , pbirth date , constraint PK_personID primary key (personID) , constraint CK_psex check (psex='男' or psex='女') ); --增加数据 create sequence seq_personID ; insert into person values (seq_personID.Nextval,'david','男',to_date('1990-09-10','yyyy-mm- dd')); insert into person values (seq_personID.Nextval,'ggyy','男',to_date('1991-10-10','yyyy-mm-dd')); insert into person values (seq_personID.Nextval,'朱 刀','男',to_date('1970-10-10','yy-mm-dd'));

insert into person values (seq_personID.Nextval,'泥 巴','女',to_date('1991-10-10','yy-mm-dd')); insert into person values (seq_personID.Nextval,'憨 坨','女',to_date('1991-10-10','yy-mm-dd')); insert into person values (seq_personID.Nextval,'李静 芳','女',to_date('1990-09-10','yyyy-mm-dd')); insert into person (personID,pname,psex) values (seq_personID.Nextval,'胖子','男'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'小成成','男'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'乐姐','女'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'靓崽波','男'); --登录账号表 create table loginzh( userID number , personID number , zhanghao varchar2(20) , passwd varchar2(20) , logintime date , loginIP varchar2(15) , constraint PK_userID primary key (userID) , constraint FK_personID foreign key (personID) references person (personID) ); --为这个表加点数据 create sequence seq_userID ; insert into loginzh values (seq_userID.Nextval,1,'111111','123456',sysdate,'127.0.0.1'); --sysdate为系统当前时间

oracle SQL里常用的时间函数

oracle SQL里常用的时间函数,经典推荐 相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle 中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。 常用日期型函数 1。Sysdate 当前日期和时间 SQL> Select sysdate from dual; SYSDATE ---------- 21-6月-05 2。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual; LAST_DAY(S ---------- 30-6月-05 3。Add_months(d,n) 当前日期d后推n个月

用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months) SQL> Select add_months(sysdate,2) from dual; ADD_MONTHS ---------- 21-8月-05 4。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))fro m dual; MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-D D')) ---------------------------------------------------------- -4.6966741 5。NEXT_DAY(d, day_of_week) 返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。

oracle常用函数习题及答案

--1、选择部门30中的雇员 select * from emp where deptno=30; --2、列出所有办事员的姓名、编号和部门 select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptno where job=upper('clerk?); --3、找出佣金高于薪金的雇员 select * from emp where comm>sal; --4、找出佣金高于薪金60%的雇员 select * from emp where comm>sal*0.6 --5、找出部门10中所有经理和部门20中的所有办事员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')); --6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(…manager?) and job<>upper(…clerk?) and sal>=2000) --7、找出收取佣金的雇员的不同工作 select distinct job from emp where comm>0; --8、找出不收取佣金或收取的佣金低于100的雇员 select * from emp where nvl(comm,0)<100; --9、找出各月最后一天受雇的所有雇员 select * from emp where hiredate= last_day(hiredate); --10、找出早于25年之前受雇的雇员

oracle常用函数介绍及其使用

Oracle函数 Oracle SQL提供了用于执行特定操作的专用函数,这些函数大大增强了SQL语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。Oracle数据库中主要使用两种类型的函数: 1.单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结 果,比如:MOD(x,y)返回x除以y的余数(x和y可以是两个整数,也可以是表中 的整数列)。常用的单行函数有: 字符函数:对字符串操作。 数字函数:对数字进行计算,返回一个数字。 转换函数:可以将一种数据类型转换为另外一种数据类型。 日期函数:对日期和时间进行处理。 2.聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如SUM(x) 返回结果集中x列的总合。 目录大纲 Oracle函数 (1) ?字符函数 (2) ?数字函数 (3) ?日期函数 (4) ?转换函数 (6) ?其他单行函数 (8) ?聚合函数 (9)

字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。下表列出了常用的字符函数。 表1 字符函数 表2 字符函数示例

数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。 表3 数字函数 说明: 1.ROUND(X[,Y]),四舍五入。 在缺省y时,默认y=0;比如:ROUND(3.56)=4。 y是正整数,就是四舍五入到小数点后y位。ROUND(5.654,2)=5.65。 y是负整数,四舍五入到小数点左边|y|位。ROUND(351.654,-2)=400。 2.TRUNC(x[,y]),直接截取,不四舍五入。 在缺省y时,默认y=0;比如:TRUNC (3.56)=3。 y是正整数,就是四舍五入到小数点后y位。TRUNC (5.654,2)=5.65。 y是负整数,四舍五入到小数点左边|y|位。TRUNC (351.654,-2)=300。

Oracle函数大全

附录Ⅱ Oracle11g SQL函数 函数名 返回 类型 说明 字符串函数 ASCII(s) 数值 返回s首位字母的ASCII码 CHR(i) 字符 返回数值i的ASCII字符 CONCAT(s1,s2) 字符 将s2连接到字符串s1的后面 INITCAP(s) 字符 将每个单词首位字母大写其它字母小写 INSTR(s1,s2[,i[,j]]) 数值 返回s2在s1中第i位开始第j次出现的位置 INSTRB(s1,s2[,i[,j]]) 数值 与INSTR(s)函数相同,但按字节计算 LENGTH(s) 数值 返回s的长度。 LENGTHb(s) 数值 与LENGTH(s)相同,但按字节计算。 lower(s) 字符 返回s的小写字符 LPAD(s1,i[,s2]) 字符 在s1的左侧用s2字符串补足到总长度i LTRIM(s1,s2) 字符 循环去掉在s2中存在的s1左边字符 RPAD(s1,i[,s2]) 字符 在s1的右侧用s2字符串补足到总长度i RTRIM(s1,s2) 字符 循环去掉在s2中存在的s1右边字符 REPLACE(s1,s2[,s3]) 字符 用s3替换出现在s1中的s2 REVERSE(s) 字符 返回s倒排的字符串 SUBSTR(s,i[,j]) 字符 从s的第i位开始截得长度j的子字符串 SUBSTRB(s,i[,j]) 字符 与SUBSTR相同,但i,j按字节计算。 SOUNDEX(s) 返回与s发音相似的词 TRANSLATE(s1,s2,s3) 字符 将s1中与s2相同的字符以s3代替 TRIM(s) 字符 删除s的首部和尾部空格 UPPER(s) 字符 返回s的大写 正则表达式函数 REGEXP_LIKE() 布尔 功能与LIKE的功能相似 REGEXP_INSTR() 数值 功能与INSTR的功能相似 REGEXP_SUBSTR() 字符 功能与SUBSTR的功能相似 REGEXP_REPLACE() 字符 功能与REPLACE的功能相似 数字函数 ABS(i) 数值 返回i的绝对值 ACOS(i) 数值 反余玄函数,返回-1到1之间的数 ASIN(i) 数值 反正玄函数,返回-1到1之间的数 ATAN(i) 数值 反正切函数,返回i的反正切值

Oracle常用函数

数值函数

日期函数 SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual; SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual; 其他函数

5.高级查询(多表联合查询) 例子: SELECT job 职务 , SUM(sal) 工资总和 FROM emp WHERE job != 'PRESIDENT' GROUP BY job HAVING SUM(sal)>4500 ORDER BY SUM(sal); 分析函数 以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始 ROW_NUMBER返回连续的排位,不论值是否相等 RANK具有相等值的行排位相同,序数随后跳跃 DENSE_RANK 具有相等值的行排位相同,序号是连续的 例子: SELECT deptno, ename, sal, comm, RANK() OVER (PARTITION BY deptno ORDER BY sal DESC, comm) RANK FROM emp; SELECT ename, job, deptno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS SAL_RANK FROM SCOTT.EMP; SELECT d.dname, e.ename, e.sal, DENSE_RANK() OVER (PARTITION BY e.deptno ORDER BY e.sal DESC) AS DENRANK FROM emp e, dept d WHERE e.deptno = d.deptno;

AAA-Oracle常用及非常用函数详解

Oracle常用及非常用函数详解 转载自:https://www.docsj.com/doc/b66425132.html,/blog/192292 感于总有些网友提出一些非常基础的问题,比如有没有实现某某功能的函数啊,某某函数是做什么用的啊,格式是什么等等,同时也感受到自己对oracle函数认识的不足,于是集中月余时间专注于oracle函数,小有心得不敢私藏,发之与诸公共享。 本文并不准备介绍全部的oracle函数,当前情势下,俺也还没这个时间,需要学习的东西太多了,要把多数时间花在学习经常能用上的技术方面:),所以如果是准备深入了解所有oracle函数的朋友,还是去关注:Oracle SQL Reference官方文档更靠谱一些。 本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数。分二类介绍,分别是: 著名函数篇-经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表示数字型,C表示字符型,D表示日期型,[ ]表示内中参数可被忽略,fmt表示格式。 单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。 (一).数值型函数(Number Functions) 数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, ATAN, and ATAN2支持30位小数点。 1、MOD(n1,n2) 返回n1除n2的余数,如果n2=0则返回n1的值。 例如:SELECT MOD(24,5) FROM DUAL; 2、ROUND(n1[,n2]) 返回四舍五入小数点右边n2位后n1的值,n2缺省值为0,如果n2为负数就舍入到小数点左边相应的位上(虽然oracle documents上提到n2的值必须为整数,事实上执行时此处的判断并不严谨,即使n2为非整数,它也会自动将n2取整后做处理,但是我文档中其它提到必须为整的地方需要特别注意,如果不为整执行时会报错的)。 例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL; 3、TRUNC(n1[,n2] 返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。 例如:SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL; (二).字符型函数返回字符值(Character Functions Returning Character Values) 该类函数返回与输入类型相同的类型。 返回的CHAR类型值长度不超过2000字节; 返回的VCHAR2类型值长度不超过4000字节; 如果上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。

ORACLE内置函数使用手册

ORACLE内置函数使用手册 ASCII()——返回字符的ASCCII码; CHAR()——当给定ASCII码返回字符; concat()——连接函数,相当于运算符“||” e.g:select CONCAT(CONCAT(name,'is a'),job) "Job" From emp result:James is a recorder initcap()——返回函数内的单词,每个词首字母大写,其他字母转化为小写,不影响非字母字符; e.g:select INITCAP('the emp') Form Emp result:The Emp INSTR(char1,char2[,n[,m]])——返回char1中包含char2的位置。n为负数时,从右往左查,第m次的结果被返回,返回其下标,缺省值都是1,若没找到,返回0。 e.g: select INSTR('CORPORATE FLOOR','OR',3,2) from table result:14 select INSTR('CORPORATE FLOOT','OR',-3,2) FROM TABLE RESULT:2 INSTRB类似INSTR,区别于,对于单字节字符系统,返回的值以字节为单位; LENGTH(CHAR)——以字节返回字符串char的长度,包括填充的字符。若char有数据型char,则字符串的长度包括其结尾的空格。若char为NULL,则该函数返回NULL; LENGTHB()——类似LENGTH(),区别于,对于单字节字符集,返回的值以字节为单位; lower()——转化小写 e.g:select lower('HELLO') from table result:hello lpad(char1,length[,char2])—— char1左边增长到length,左边补char2。char2未设定时,默认空格,当char2小于length时,仅前几个被复制 例:select lpad('hugo',10,'*#') from table result:*#*#*#hugo LTRIM('char [,set])——删除char左边出现的set字符。 例:Select ltrim('abaabhi','ab') 运行返回:aabhi

ORACLE常用数值函数、转换函数、字符串函数介绍

(一)本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思 的一些函数。分二类介绍,分别是: 著名函数篇-经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表示数字型,C表示字符型,D表示日期型,[]表示内中参数可被忽略,fmt 表示格式。 单值函数在查询中返回单个值,可被应用到select,where子句,start with以及connect by 子句和having子句。 (一).数值型函数(Number Functions) 数值型函数输入数字型参数并返回数值型的值。多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小数点。ACOS, ASIN, A TAN, and A TAN2支持30位小数点。 1、MOD(n1,n2) 返回n1除n2的余数,如果n2=0则返回n1的值。 例如:SELECT MOD(24,5) FROM DUAL; 2、ROUND(n1[,n2]) 返回四舍五入小数点右边n2位后n1的值,n2缺省值为0,如果 n2为负数就舍入到小数点左边相应的位上(虽然oracle documents上提到n2的值必须为整数,事实上执行时此处的判断并不严谨,即使n2为非整数,它也会自动将n2取整后做处理,但是我文档中其它提到必须为整的地方需要特别注意,如果不为整执行时会报错的)。 例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL; 3、TRUNC(n1[,n2] 返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省 设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。 例如:SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL; (二).字符型函数返回字符值(Character Functions Returning Character Values) 该类函数返回与输入类型相同的类型。 返回的CHAR类型值长度不超过2000字节;λ 返回的VCHAR2类型值长度不超过4000字节;λ 如果上述应返回的字符长度超出,oracle并不会报错而是直接截断至最大可支持长度返回。 返回的CLOB类型值长度不超过4G;λ 对于CLOB类型的函数,如果返回值长度超出,oracle不会返回任何错误而是直接抛出错误。 1、LOWER(c) 将指定字符串内字符变为小写,支持CHAR,V ARCHAR2,NCHAR,NV ARCHAR2,CLOB,NCLOB类型

Oracle分析函数使用的总结

Oracle分析函数使用总结 1.使用评级函数 评级函数(ranking function)用于计算等级、百分点、n分片等等,下面是几个常用到的评级函数:RANK():返回数据项在分组中的排名。特点:在排名相等的情况下会在名次中留下空位DENSE_RANK():与RANK不同的是它在排名相等的情况下不会在名次中留下空位 CUME_DIST():返回特定值相对于一组值的位置:他是“cumulative distribution”(累积分布)的简写PERCENT_RANK():返回某个值相对于一组值的百分比排名 NTILE():返回n分片后的值,比如三分片、四分片等等 ROW_NUMBER():为每一条分组纪录返回一个数字 下面我们分别举例来说明这些函数的使用 1)RANK()与DENSE-RANK() 首先显示下我们的源表数据的结构及部分数据: SQL> desc all_sales; 名称是否为空? 类型 ----------------------------------------- -------- ----------- YEAR NOT NULL NUMBER(38) MONTH NOT NULL NUMBER(38) PRD_TYPE_ID NOT NULL NUMBER(38) EMP_ID NOT NULL NUMBER(38) AMOUNT NUMBER(8,2) SQL> select * from all_sales where rownum<11; YEAR MONTH PRD_TYPE_ID EMP_ID AMOUNT ---------- ---------- ----------- ---------- ---------- 2003 1 1 21 10034.84 2003 2 1 21 15144.65 2003 3 1 21 20137.83 2003 4 1 21 25057.45 2003 5 1 21 17214.56 2003 6 1 21 15564.64 2003 7 1 21 12654.84 2003 8 1 21 17434.82 2003 9 1 21 19854.57 2003 10 1 21 21754.19 已选择10行。 好接下来我们将举例来说明上述函数的使用:首先是RANK()与DENSE-RANK()的使用:SQL> select 2 prd_type_id,sum(amount), 3 RANK() OVER (ORDER BY SUM(amount) DESC) AS rank, 4 DENSE_RANK() OVER (ORDER BY SUM(amount) DESC) AS dense_rank 5 from all_sales

oracle常用函数使用大全

oracle常用函数使用大全 一、运算符 算术运算符:+ - * / 可以在select 语句中使用 连接运算符:|| select deptno|| dname from dept; 比较运算符:> >= = != < <= like between is null in 逻辑运算符:not and or 集合运算符:intersect ,union,union all,minus 要求:对应集合的列数和数据类型相同 查询中不能包含long 列 列的标签是第一个集合的标签 使用order by时,必须使用位置序号,不能使用列名 例:集合运算符的使用: intersect ,union,union all,minus select * from emp intersect select * from emp where deptno=10 ; select * from emp minus select * from emp where deptno=10; select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行 select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复行 二.ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年显示值:07 yyy three digits 三位年显示值:007 yyyy four digits 四位年显示值:2007 Month: mm number 两位月显示值:11 mon abbreviated 字符集表示显示值:11月,若是英文版,显示nov month spelled out 字符集表示显示值:11月,若是英文版,显示november

Oracle常用函数以及行列转换

常用的函数 数值函数 ABS(N) 返回指定值的绝对值 CEIL(N) 返回大于或等于给出数字的最小整数 FLOOR(N) 对给定的数字取整数 MOD(M,N) 返回一个M除以N的余数 ROUND( M [,N] ) 按照指定的小数位元数进行四舍五入运算的结果 参数:如果N不为整数则截取N整数部分,如果N>0则四舍五入为N位小数,如果N 小于0则四舍五入到小数点向左第N位。 TRUNC(M[,N]) 返回M按精度N截取后的值 参数:如果N不为整数则截取N整数部分,如果N>0则截取到N位小数,如果N小于0则截取到小数点向左第N位,小数前其它数据用0表示。 转换函数 TO_CHAR (NUMBER | date,'format') TO_NUMBER (char , 'format') TO_DATE (char, 'format')

分组函数 MAX AVG MIN COUNT SUM

字段为空的判断 NULL的概述 NULL在Oracle中是很特殊的值,任何类型的值都可以是NULL。如果在某行中有一列没有值,那么就说慈航中这个列的值是NULL。NULL是未知的东西,常称它为“UNKNOWN”或空值。正因为它是未知的,才会有很多值得注意的规则。NULL可以是任何数据类型的值,也可以不依赖于数据类型单独存在(字面量NULL),任何没有NOT NULL约束或主键约束的列都有可能出现NULL值。 NULL和其他任何值都不相等或相等,包括自身(当然是用IS NULL判断是可以的)。但是在某些时候,Oracle却把他们当成相等的(指Oracle的一些内部规则),如SQL集合语句、Group by分组、Decode函数等。 NULL的判断和比较运算规则 Oracle中判断一个列值或变量值是否是NULL,必须是用IS NULL或IS NOT NULL,而不能使用=NULL或<>NULL。 NULL的算数或者逻辑运算规则 NULL做一些算数运算,比如+、-、*、/等,结果还是NULL,但是对于连接操作符||,NULL忽略。 select null+10 from dual; select null||'ygczm' from dual; select concat(null,'ygczm') from dual; NULL与函数 Oracle对NULL处理有专门的函数,所以这里只讲述NVL、NVL2、NULLIF、COALESCE、DECODE函数,以及两种CASE表达式对NULL的处理。 NVL函数 语法:NVL(expr1,expr2) 描述:常用语expr1可能是NULL,而我们又不想在查询结果中出现空值的转换需求。 如果expr1是NULL,那么用expr2作为返回值,不是NULL则返回expr1。 expr1和expr2一般是类型相同的,如果类型不同会采用自动类型转换,如果转换失败

相关文档