??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
select column_id, column_name, data_type, data_length, data_precision, data_scale,nullable,data_default from user_tab_columns where table_name = 'Tablename' order by column_id
函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏?jin)一pd函数Q这些函数都可被UCؓ(f)SQL或PL/SQL语句Q函C要分Z大类Q? 单行函数、组函数 本文讨论如何利用单行函C?qing)用规则? SQL中的单行函数 SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含?jin)TO_CHAR,UPPER,SOUNDEX{单行函数?
单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中? NULL和单行函?/strong> 在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ(f)提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了(jin)NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ(f)他能直接处理NULL|NVL有两个参敎ͼ(x)NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1? 下面我们看看emp数据表它包含?jin)薪水、奖金两,需要计ȝ补偿
不是单的薪水和奖金加v来就可以?jin),如果某一行是null值那么结果就是nullQ比如下面的例子Q?
q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃(x)得出错误的结论,q个时候就要用nvl函数来排除null值的影响? 所以正的语句是:(x)
单行字符串函?/strong> 单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串 ASCII() c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()
CHR(QiQ?[NCHAR_CS] i是一个数字,函数q回十进制表C的字符
CONCAT(,) c1,c2均ؓ(f)字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓ(f)nullQ则q回null。他和操作符||q回的结果相?
INITCAP() c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?
INSTR(,[,QiQ[,]]) c1,c2均ؓ(f)字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦(ch)从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ(f)1.
INSTRB(,[,i[,j]) 与INSTRQ)(j)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR() LENGTH() c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?
LENGTHb() 与LENGTH()一Pq回字节? lower() q回c的小写字W,l常出现在where子串?
LPAD(,QiQ[,]) c1,c2均ؓ(f)字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空|参见RPAD?
LTRIM(,) 把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃?x)改变?
RPAD(,QiQ[,]) 在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空?其他与LPAD怼 RTRIM(,) 把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃?x)改变? REPLACE(,[,]) c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?
STBSTR(,QiQ[,]) c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓ(f)j的子字符Ԍ如果j为空Q则直到串的N?
SUBSTRB(,QiQ[,]) 与SUBSTR大致相同Q只是I,J是以字节计算? SOUNDEX() q回与c1发音怼的词
TRANSLATE(,,) c1中与c2相同的字W以c3代替
TRIM([[]] from c3) c3串中的第一个,最后一个,或者都删除?
UPPER() q回c1的大写,常出现where子串?
单行数字函数 单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数? |
ABS()
q回n的绝对?
ACOS()
反余玄函敎ͼq回-1?之间的数。n表示弧度
|
ASIN()
反正玄函敎ͼq回-1?Qn表示弧度
ATAN()
反正切函敎ͼq回n的反正切|n表示弧度?
CEIL()
q回大于或等于n的最整数?
COS()
q回n的余玄|n为弧?
COSH()
q回n的双曲余玄|n 为数字?
|
EXP()
q回e的nơ幂Qe=2.71828183.
FLOOR()
q回于{于N的最大整数?
LN()
q回N的自然对敎ͼN必须大于0
LOG(,)
q回以n1为底n2的对?
MOD()
q回n1除以n2的余敎ͼ
POWER(,)
q回n1的n2ơ方
ROUND(,)
q回舍入数点右边n2位的n1的|n2的缺省gؓ(f)0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?
|
SIGN()
如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.
SINQ?
q回n的正玄?n为弧度?
SINH()
q回n的双曲正玄?n为弧度?
SQRT()
q回n的^Ҏ(gu),n为弧?
TANQ?
q回n的正切?n为弧?
TANH()
q回n的双曲正切?n为弧?
TRUNC(,)
q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时?x)将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/p>
单行日期函数
单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?
ADD_MONTHS(,QiQ?
q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会(x)截去数点后面的部分?
LAST_DAY()
函数q回包含日期d的月份的最后一?
MONTHS_BETWEEN(,)
q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则?x)返回的l果包含一个分数?
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?
NEXT_DAY(,)
q回日期d后由dowl出的条件的W一天,dow使用当前?x)话中给出的语言指定?jin)一周中的某一天,q回的时间分量与d的时间分量相同?
select NEXT_DAY('01-Jan-2000'
|
ROUND([,])
日期d按照fmt指定的格式舍入,fmt为字W串?
SYADATE
函数没有参数Q返回当前日期和旉?
TRUNC([,])
q回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行{换?
CHARTORWID()
c 使一个字W串Q函数将c转换为RWID数据cd?
|
CONVERT(,[,])
c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓ(f)dset字符集,sset的缺省设|ؓ(f)数据库的字符集?
HEXTORAW()
x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?
RAWTOHEX()
x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ(f)16q制的数据类型?
ROWIDTOCHAR()
函数ROWID数据cd转换为CHAR数据cd?
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号?
|
TO_DATE([,[,Q?
c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?
TO_MULTI_BYTE()
c表示一个字W串Q函数将c的担子截字符转换成多字节字符?
TO_NUMBER([,[,)
c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?
TO_SINGLE_BYTE()
字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/p>
其它单行函数
BFILENAME( ,)
dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?
DECODE(,,[,,,[])
x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?
DUMP(,[,[,[,]]])
x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了(jin)有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了(jin)n1,n2那么从n1开始的长度为n2的字节将被返回?
EMPTY_BLOB()
该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?
EMPTY_CLOB()
该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?
GREATEST()
exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?
LEAST()
exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?
UID
该函数没有参敎ͼq回唯一标示当前数据库用L(fng)整数?
USER
q回当前用户的用户名
USERENV()
Zoptq回包含当前?x)话信息。opt的可选gؓ(f)Q?
ISDBA ?x)话中SYSDBA脚色响应Q返回TRUE
SESSIONID q回审计?x)话标示W?
ENTRYID q回可用的审计项标示W?
INSTANCE 在会(x)话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?
LANGUAGE q回语言、地域、数据库讄的字W集?
LANG q回语言名称的ISO~写?
TERMINAL 为当前会(x)话用的l端或计机q回操作pȝ的标C符?
VSIZE()
x是一个表辑ּ。返回x内部表示的字节数?
SQL中的l函?/strong>
l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.
l(多行Q函?/strong>
与单行函数相比,oracle提供?jin)丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?
AVG([{DISYINCT|ALL}])
q回数值的q_倹{缺省设|ؓ(f)ALL.
|
COUNT({*|DISTINCT|ALL} )
q回查询中行的数目,~省讄是ALL,*表示q回所有的行?
MAX([{DISTINCT|ALL}])
q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?
MIN([{DISTINCT|ALL}])
q回选择列表目的最倹{?
STDDEV([{DISTINCT|ALL}])
q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?
SUM([{DISTINCT|ALL}])
q回选择列表目的数值的d?
VARIANCE([{DISTINCT|ALL}])
q回选择列表目的统计方差?
用GROUP BYl数据分l?/strong>
正如题目暗示的那L(fng)函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ(f)分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ(f)一cR?
|
在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?
|
用HAVING子句限制分组数据
现在你已l知道了(jin)在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:(x)
|
q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?
|