??xml version="1.0" encoding="utf-8" standalone="yes"?> The following is a list of valid parameters when the to_char function is used to convert a date to a string. These parameters can be used in many combinations. The following are date examples for the to_char function. You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below. The zeros have been suppressed so that the day component shows as "9" as opposed to "09". to_charQ函数功能,是数值型或者日期型转化为字W型?/p>
比如最单的应用Q?/p>
接下来再看看下面Q?/p>
上面的结?'.123' 在大多数情况下都不是我们惌的结果,我们惌的应该是 '0.123'?/p>
我们来看一下to_char函数的具体用法:(x) 通过上面的了解,再查看fmt的一些格式,我们可以用以下表辑ּ得到'0.123'的|(x) ' 0.123'是出来了Q可是前面又多了一个空根{?/p>
对于 100.12 的值却?#####Q以?1.12'的值变成了 '1.120'?/p>
我们重新定一个新的需求:(x) 1、去I格 2、小数点最?位,最保?位?/p>
1--->'1.00'Q?.1--->'1.00'Q?.12-->'1.12'Q?.1234--->'1.1234'Q?/p>
1.12345--->'1.1235' 最l实现如下:(x) PLSQL经?br />
一?Oracle的to_char()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是数如:(x)0.23q样的数据经qto_char后再昄?x)变?23Q如果你Z让它昄出原来的0.23的话得用To_char(要格式化的数?’0.999’)保留三个数Qƈ昄但这里就要注意了。他Z截取数的时候是四舍五入了。所以如果是要求截掉数而不四舍五入的话应该自己写个函数截下去后再规格化。以保证它不四舍五入? ?补充一?是在写存储q程时要注意参数名不能与数据?/strong>字段名相?否则Oracle?x)把q个参数名看成是字段名的,即你用表的别名区分也不?所以v参数名的时候一定要注意q点?
to_char(1210.73, '9999.9')
would return '1210.7'
to_char(1210.73, '9,999.99')
would return '1,210.73'
to_char(1210.73, '$9,999.00')
would return '$1,210.73'
to_char(21, '000099')
would return '000021'
Parameter
Explanation
YEAR
Year, spelled out
YYYY
4-digit year
YYY
YY
YLast 3, 2, or 1 digit(s) of year.
IYY
IY
ILast 3, 2, or 1 digit(s) of ISO year.
IYYY
4-digit year based on the ISO standard
Q
Quarter of year (1, 2, 3, 4; JAN-MAR = 1).
MM
Month (01-12; JAN = 01).
MON
Abbreviated name of month.
MONTH
Name of month, padded with blanks to length of 9 characters.
RM
Roman numeral month (I-XII; JAN = I).
WW
Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
W
Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IW
Week of year (1-52 or 1-53) based on the ISO standard.
D
Day of week (1-7).
DAY
Name of day.
DD
Day of month (1-31).
DDD
Day of year (1-366).
DY
Abbreviated name of day.
J
Julian day; the number of days since January 1, 4712 BC.
HH
Hour of day (1-12).
HH12
Hour of day (1-12).
HH24
Hour of day (0-23).
MI
Minute (0-59).
SS
Second (0-59).
SSSSS
Seconds past midnight (0-86399).
FF
Fractional seconds.
to_char(sysdate, 'yyyy/mm/dd');
would return '2003/07/09'
to_char(sysdate, 'Month DD, YYYY');
would return 'July 09, 2003'
to_char(sysdate, 'FMMonth DD, YYYY');
would return 'July 9, 2003'
to_char(sysdate, 'MON DDth, YYYY');
would return 'JUL 09TH, 2003'
to_char(sysdate, 'FMMON DDth, YYYY');
would return 'JUL 9TH, 2003'
to_char(sysdate, 'FMMon ddth, YYYY');
would return 'Jul 9th, 2003'
to_char(sysdate, 'FMMonth DD, YYYY');
would return 'July 9, 2003'
to_char(sysdate, 'FMMON DDth, YYYY');
would return 'JUL 9TH, 2003'
to_char(sysdate, 'FMMon ddth, YYYY');
would return 'Jul 9th, 2003'
Oracle函数to_char转化数字型指定小数点位数的用?/strong>
Select TO_CHAR(1.0123) FROM DUAL
/*123--->'123'*/
Select TO_CHAR(123) FROM DUAL
SELEC TO_CHAR(0.123) FROM DUALTO_CHAR ( n [, fmt [, 'nlsparam']] )
Q小数点字符
Q组分隔W?
Q本地钱币符?
Q国际钱币符?
变元的Ş式ؓ(f)Q?
'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'
其中d为小数点字符,g为组分隔W?
?nbsp;:TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145
Select TO_CHAR(0.123,'0.999') FROM DUAL
/*100.12 ---> '######' */
Select TO_CHAR(100.12,'0.999') FROM DUAL
/*1.12 ---> ' 1.120' */
Select TO_CHAR(1.12,'0.999') FROM DUAL
FM Q除I格
9999999.0099Q允许小数点左边最大正Cؓ(f)7位,数点右Ҏ(gu)?位,最?位,且在W?位进行四舍五?
*/
Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUAL
二?To_char(1.9999,’FM90.0999’)q个函数规格化时90.0999的含义是?的地方如果有数字显C如果没有数字就不显C,?的地方在没有数字的时候也?x)有Q来占位.但这样做也有一个很大的~点,是如果是整数时它也仍然?x)显C?#8221;.”,不要瞧q个?一般来讲页面上要显C的话这个点是多余?也给我们造成了不的ȝ(ch).q要自己再写函数来把q个点搞定.
三?对于日期型的Oracle倒时提供了一个好的处理方?可以把日期做成数值型?然后再To_charp昄Z所需要的cd?
四?在用select into时一定要注意,q种Ҏ(gu)你一定要认肯定?x)有数据被查出时才能使?如果查询l果为空时会(x)D报错.q有一U情冉|查出来的数据是多条也?x)报?所以应该尽量便宜游标来??x)减错误生的机?
五?q有注意一点rownum不支持排?是说你想用q个来控制行数的话就?x)发C没有按你指定的排序方式显C?,q是一个很隑֊的事.而且如果你用rownum=2q样的语句来输出W二行的话也是行不通的. 六?最恶心的一Ҏ(gu)Oracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.管aa的确是空.即在选择条g里也是判断不出来?不知道ؓ(f)什?只好用nvl()q个函数来判断了.在条件之外可以用 aa is null 来判?
]]>
·软g环境Q?
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:(x)C:/ORANT
·含义解释Q?
decode(条g,?,译?,?,译?,...值n,译值n,~省?
该函数的含义如下Q?br />
IF 条g=? THEN
RETURN(译?)
ELSIF 条g=? THEN
RETURN(译?)
......
ELSIF 条g=值n THEN
RETURN(译值n)
ELSE
RETURN(~省?
END IF
· 使用Ҏ(gu)Q?
1、比较大?br />
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较?yu)?br />
sign()函数Ҏ(gu)某个值是0、正数还是负敎ͼ分别q回0??1
例如Q?br />
变量1=10Q变?=20
则sign(变量1-变量2)q回-1Qdecode解码l果?#8220;变量1”Q达C取较?yu)值的目的?/p>
2、表、视囄构{?br />
现有一个商品销售表saleQ表l构为:(x)
month char(6) --月䆾
sell number(10,2) --月销售金?/p>
现有数据为:(x)
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
惌转化Z下结构的数据Q?br />
year char(4) --q䆾
month1 number(10,2) --1月销售金?br />
month2 number(10,2) --2月销售金?br />
month3 number(10,2) --3月销售金?br />
month4 number(10,2) --4月销售金?br />
month5 number(10,2) --5月销售金?br />
month6 number(10,2) --6月销售金?br />
month7 number(10,2) --7月销售金?br />
month8 number(10,2) --8月销售金?br />
month9 number(10,2) --9月销售金?br />
month10 number(10,2) --10月销售金?br />
month11 number(10,2) --11月销售金?br />
month12 number(10,2) --12月销售金?/p>
l构转化的SQL语句为:(x)
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),'01',sell,0)),
sum(decode(substrb(month,5,2),'02',sell,0)),
sum(decode(substrb(month,5,2),'03',sell,0)),
sum(decode(substrb(month,5,2),'04',sell,0)),
该文章{载自宋氏?sh)?技术无忧:(x)http://www.pc51.net/data/ORACLE/2007-01-12/4692.html
Start with...Connect By子句递归查询一般用于一个表l护?wi)Şl构的应用?br />
创徏CZ表:(x)
CREATE TABLE TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
插入试数据Q?br />
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
从Root往?wi)末梢递归
select * from TBL_TEST
start with id=1
connect by prior id = pid
从末梢往?wi)ROOT递归
select * from TBL_TEST
start with id=5
connect by prior pid = id
PL/SQL单行函数和组函数详解
函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓ(f)SQL或PL/SQL语句Q函C要分Z大类Q?
单行函数
l函?
本文讨论如何利用单行函C?qing)用规则?/p>
SQL中的单行函数
SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?br /> SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)
单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/p>
NULL和单行函?/p>
在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ(f)提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ(f)他能直接处理NULL|NVL有两个参敎ͼ(x)NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1?/p>
下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2
不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?br /> update empset salary=(salary+bonus)*1.1
q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃(x)得出错误的结论,q个时候就要用nvl函数来排除null值的影响?br />
所以正的语句是:(x)
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函?/p>
单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串
ASCII()
c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()
SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122
CHR(QiQ?[NCHAR_CS]
i是一个数字,函数q回十进制表C的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B
CONCAT(,)
c1,c2均ؓ(f)字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓ(f)nullQ则q回null。他和操作符||q回的结果相?br />
select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda
INITCAP()
c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?br />
select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici
INSTR(,[,QiQ[,]])
c1,c2均ؓ(f)字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦(ch)从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ(f)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])
与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()
LENGTH()
c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?br />
select LENGTH('Ipso Facto') ergo from dualergo10
LENGTHb()
与LENGTH()一Pq回字节?/p>
lower()
q回c的小写字W,l常出现在where子串?br />
select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite
LPAD(,QiQ[,])
c1,c2均ؓ(f)字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空|参见RPAD?br />
select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe
LTRIM(,)
把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃?x)改变?br />
select LTRIM('Mississippi','Mis') from dualLTRppi
RPAD(,QiQ[,])
在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空?其他与LPAD怼
RTRIM(,)
把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃?x)改变?/p>
REPLACE(,[,])
c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?br />
select REPLACE('uptown','up','down') from dualREPLACEdowntown
STBSTR(,QiQ[,])
c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓ(f)j的子字符Ԍ如果j为空Q则直到串的N?br />
select SUBSTR('Message',1,4) from dualSUBSMess
SUBSTRB(,QiQ[,])
与SUBSTR大致相同Q只是I,J是以字节计算?/p>
SOUNDEX()
q回与c1发音怼的词
select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250
TRANSLATE(,,)
c1中与c2相同的字W以c3代替
select TRANSLATE('fumble','uf','ar') test from dualTEXTramble
TRIM([[]] from c3)
c3串中的第一个,最后一个,或者都删除?br />
select TRIM(' space padded ') trim from dual TRIMspace padded
UPPER()
q回c1的大写,常出现where子串?br />
select name from dual where UPPER(name) LIKE 'KI%'NAMEKING
单行数字函数
单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作
数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/p>
ABS()
q回n的绝对?/p>
ACOS()
反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0
ASIN()
反正玄函敎ͼq回-1?Qn表示弧度
ATAN()
反正切函敎ͼq回n的反正切|n表示弧度?/p>
CEIL()
q回大于或等于n的最整数?/p>
COS()
q回n的余玄|n为弧?/p>
COSH()
q回n的双曲余玄|n 为数字?br />
select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847
EXP()
q回e的nơ幂Qe=2.71828183.
FLOOR()
q回于{于N的最大整数?/p>
LN()
q回N的自然对敎ͼN必须大于0
LOG(,)
q回以n1为底n2的对?/p>
MOD()
q回n1除以n2的余敎ͼ
POWER(,)
q回n1的n2ơ方
ROUND(,)
q回舍入数点右边n2位的n1的|n2的缺省gؓ(f)0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?br />
select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54
SIGN()
如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.
SINQ?
q回n的正玄?n为弧度?/p>
SINH()
q回n的双曲正玄?n为弧度?/p>
SQRT()
q回n的^Ҏ(gu),n为弧?/p>
TANQ?
q回n的正切?n为弧?/p>
TANH()
q回n的双曲正切?n为弧?/p>
TRUNC(,)
q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时?x)将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/p>
单行日期函数
单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/p>
ADD_MONTHS(,QiQ?
q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会(x)截去数点后面的部分?/p>
LAST_DAY()
函数q回包含日期d的月份的最后一?
MONTHS_BETWEEN(,)
q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则?x)返回的l果包含一个分数?/p>
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/p>
NEXT_DAY(,)
q回日期d后由dowl出的条件的W一天,dow使用当前?x)话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?br />
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为字W串?/p>
SYADATE
函数没有参数Q返回当前日期和旉?/p>
TRUNC([,])
q回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行{换?/p>
CHARTORWID()
c 使一个字W串Q函数将c转换为RWID数据cd?br />
SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')
CONVERT(,[,])
c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓ(f)dset字符集,sset的缺省设|ؓ(f)数据库的字符集?/p>
HEXTORAW()
x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/p>
RAWTOHEX()
x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ(f)16q制的数据类型?/p>
ROWIDTOCHAR()
函数ROWID数据cd转换为CHAR数据cd?/p>
TO_CHAR([[,)
x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及(qing)货币W号?br />
NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
TO_DATE([,[,Q?br /> c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/p>
TO_MULTI_BYTE()
c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/p>
TO_NUMBER([,[,)
c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/p>
TO_SINGLE_BYTE()
字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/p>
其它单行函数
BFILENAME(
,)
dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/p>
DECODE(,,[,,,[])
x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/p>
DUMP(,[,[,[,]]])
x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/p>
EMPTY_BLOB()
该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/p>
EMPTY_CLOB()
该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/p>
GREATEST()
exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>
LEAST()
exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>
UID
该函数没有参敎ͼq回唯一标示当前数据库用L(fng)整数?/p>
USER
q回当前用户的用户名
USERENV()
Zoptq回包含当前?x)话信息。opt的可选gؓ(f)Q?/p>
ISDBA ?x)话中SYSDBA脚色响应Q返回TRUE
SESSIONID q回审计?x)话标示W?/p>
ENTRYID q回可用的审计项标示W?
INSTANCE 在会(x)话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?br />
LANGUAGE q回语言、地域、数据库讄的字W集?br />
LANG q回语言名称的ISO~写?br />
TERMINAL 为当前会(x)话用的l端或计机q回操作pȝ的标C符?/p>
VSIZE()
x是一个表辑ּ。返回x内部表示的字节数?br />
SQL中的l函?/p>
l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.
l(多行Q函?/p>
与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/p>
AVG([{DISYINCT|ALL}])
q回数值的q_倹{缺省设|ؓ(f)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} )
q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/p>
MAX([{DISTINCT|ALL}])
q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/p>
MIN([{DISTINCT|ALL}])
q回选择列表目的最倹{?/p>
STDDEV([{DISTINCT|ALL}])
q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/p>
SUM([{DISTINCT|ALL}])
q回选择列表目的数值的d?/p>
VARIANCE([{DISTINCT|ALL}])
q回选择列表目的统计方差?/p>
用GROUP BYl数据分l?/p>
正如题目暗示的那L(fng)函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ(f)分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ(f)一cR?br /> select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982
在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?br /> select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982
用HAVING子句限制分组数据
现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:(x)
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?br /> SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;
嵌套函数
函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?br />