a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 116|回复: 0

[考试辅导] Oracle性能调优:日期时间函数大全4

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
三。 字符函数(可用于字面字符或数据库列)& U( x! m) R: c$ M9 t6 O* l/ y
    1,字符串截取
  _" J3 K! Q. @% k, G    select substr('abcdef',1,3) from dual
6 G3 a9 d& a& V! f. E7 c7 [9 C    2,查找子串位置/ U; M! F/ ^- |
    select instr('abcfdgfdhd','fd') from dual
# K6 ?- r* l. f2 K    3,字符串连接' O0 p6 R* s9 d) \6 s" ~
    select 'HELLO'||'hello world' from dual;
  J. k4 G; ^" R4 w: y    4, 1)去掉字符串中的空格
7 W/ N# N3 Q3 i; V    select ltrim(' abc') s1,1 i4 X& U2 `6 r0 W  k1 `9 ^
    rtrim('zhang ') s2,6 L4 i- Q, w; S& Y/ N& D
    trim(' zhang ') s3 from dual
/ l) @, p0 F$ d+ N/ s    2)去掉前导和后缀
! ?1 V, U! P. s. u( Q    select trim(leading 9 from 9998767999) s1,
; w, k- b6 v  B8 d    trim(trailing 9 from 9998767999) s2,4 r$ A7 Z' K0 O% ^* P' G; Z
    trim(9 from 9998767999) s3 from dual;
: c* H6 w$ F" ^$ j    5,返回字符串首字母的Ascii值& l* Z. k8 G7 H5 G) J
    select ascii('a') from dual
5 g- w+ j4 h& y$ y' L    6,返回ascii值对应的字母3 S( Y; ~1 T, q! Z
    select chr(97) from dual, a; b8 l3 B& Q# U* d, ^
    7,计算字符串长度' J, h) x. h9 ]8 S+ s, X7 O
    select length('abcdef') from dual) `) v. G$ n& Z* M( R* g
    8,initcap(首字母变大写) ,lower(变小写),upper(变大写)+ ]7 r9 m1 X6 E. m; k* e
    select lower('ABC') s1,
+ K5 ]# e( c+ F) z& L' ], s" p    upper('def') s2,& O5 Z" f0 z% m, q' Y# w6 M
    initcap('efg') s3
3 N5 G- u6 v6 f    from dual;( P8 \, z4 W" t! s# b% K; S7 I
    9,Replace2 E; ^+ [7 g3 ^' x8 r
    select replace('abc','b','xy') from dual;
5 f- U; ?3 m3 c3 y" d. x    10,translate; g! B1 q0 i0 k2 Z# Y9 I
    select translate('abc','b','xx') from dual; -- x是1位4 t3 a5 ^# n$ x- Y
    11,lpad [左添充] rpad [右填充](用于控制输出格式)$ L9 t% v3 V1 \% u0 G, z" E6 d. e
    select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;
% A% A  l( r5 c& ^/ g    select lpad(dname,14,'=') from dept;
- a+ I3 P% T. M* X2 u+ a* M4 {4 [: R. A4 w    12, decode[实现if then 逻辑] 注:第一个是表达式,最后一个是不满足任何一个条件的值8 V6 N. R7 P* V  v2 [  ~# W* C9 I" Y
    select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;4 k) i+ ?) @7 K6 G. U  q& N8 O
    例:8 ^- Q# {5 h- y& |! [* m
    select seed,account_name,decode(seed,111,1000,200,2000,0) from t_userInfo//如果seed为111,则取1000;为200,取2000;其它取0
; G& ^7 @* a* q    select seed,account_name,decode(sign(seed-111),1,'big seed',-1,'little seed','equal seed') from t_userInfo//如果seed>111,则显示大;为200,则显示小;其它则显4 e+ a1 m% {. J) I
    示相等
/ i' \7 z2 {* e) W, a    13 case[实现switch case 逻辑]
% ~5 s* ]" Z! |$ m    SELECT CASE X-FIELD) Z$ s0 ]: D2 \/ t4 y4 p# B3 e. \# z% J
    WHEN X-FIELD < 40 THEN 'X-FIELD 小于 40'
0 L* I2 q6 @+ Z/ z* q  x" S    WHEN X-FIELD < 50 THEN 'X-FIELD 小于 50'* K) ~( |# H* Q8 u
    WHEN X-FIELD < 60 THEN 'X-FIELD 小于 60', {! v# _& k9 |2 z9 k
    ELSE 'UNBEKNOWN'1 g8 Q: v0 E% Q( e# \4 X/ |( @  V
    END# A( u- j. R9 h* L8 K7 b
    FROM DUAL
4 b9 i2 V$ L8 D7 P' ]  N, {/ X    注:CASE语句在处理类似问题就显得非常灵活。当只是需要匹配少量数值时,用Decode更为简洁。
; Z) V( _3 @; @    四。数字函数- W& u6 w5 ^$ Z) y) X; G2 E/ j
    1,取整函数(ceil 向上取整,floor 向下取整)
' R- p9 a9 r2 Q    select ceil(66.6) N1,floor(66.6) N2 from dual;7 ~: c6 m  z8 H# L
    2, 取幂(power) 和 求平方根(sqrt)1 z% S6 J4 r. m& a9 z
    select power(3,2) N1,sqrt(9) N2 from dual;& A& R. X) n6 U1 m6 ^) ~# L
    3,求余& t+ Z% Y( j5 ]! Y# Z3 r3 ^
    select mod(9,5) from dual;8 Q9 i7 U0 O; I' Q& r
    4,返回固定小数位数 (round:四舍五入,trunc:直接截断)
% o$ s  D2 O; H    select round(66.667,2) N1,trunc(66.667,2) N2 from dual;
# r# _4 P% q# A+ W" b  J7 S    5,返回值的符号(正数返回为1,负数为-1)( I6 p+ q7 o8 H
    select sign(-32),sign(293) from dual;
! G" ~& p4 N& e1 ^) r+ M6 v  d& S    五。转换函数
% R! }6 l% L/ G* b    1,to_char()[将日期和数字类型转换成字符类型]
! l& Y7 F4 x+ D+ O- i    1) select to_char(sysdate) s1,7 R( P- c% n; C9 S( Z
    to_char(sysdate,'yyyy-mm-dd') s2,
4 F0 B6 A. [0 y    to_char(sysdate,'yyyy') s3,& ~; G( o( K8 W
    to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,
$ \6 C8 ^2 j3 m& |( F, Z/ u    to_char(sysdate, 'hh24:mi:ss') s5,6 N- h; L' J5 F' n  g; ?6 O
    to_char(sysdate,'DAY') s6
4 e3 Z7 u; h! @2 u* X0 |    from dual;
+ F9 O  d# l: K/ L# x7 @& L* X    2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp' Q+ \8 }. d; ?1 c
    2, to_date()[将字符类型转换为日期类型]
/ X4 m+ |5 P1 j; A: D/ o    insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd'));
! K7 t1 Y$ D3 }    3, to_number() 转换为数字类型
* I1 q9 X% \, w7 X6 c    select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数
8 ~8 _' q0 }! T# G' P& Y    六。其他函数
/ \9 o) \# T- ?. _. z( l" {1 Q8 t' n    1.user:$ w8 ?3 R, I" K- l. p7 l$ d5 U6 S
    返回登录的用户名称
; l- |& A6 g0 t! P% k% X; ^$ W    select user from dual;
8 w% B1 x  l1 m$ r    2.vsize:
4 C+ g. x0 j" A# O" W( u4 Q% s    返回表达式所需的字节数
3 a! K2 T4 b+ v5 b+ B    select vsize('HELLO') from dual;
2 r( b2 V( c  W  P    3.nvl(ex1,ex2):
2 v2 k9 i5 Y0 D4 d" s5 y& ^    ex1值为空则返回ex2,否则返回该值本身ex1(常用)
: M4 U$ j) R0 v' G7 o( ]! B! Z    例:如果雇员没有佣金,将显示0,否则显示佣金) P; D2 w  y9 k' Z. ^4 R- ]- E
    select comm,nvl(comm,0) from emp;! E  @) ]/ n) H$ b0 K
    4.nullif(ex1,ex2):( t- u5 t% o/ a/ v4 `' c4 s
    值相等返空,否则返回第一个值9 C! Q& R+ J: U, r8 G
    例:如果工资和佣金相等,则显示空,否则显示工资& N6 s' ^/ m. Z% Y
    select nullif(sal,comm),sal,comm from emp;# d3 G$ m0 k. P
    5.coalesce:
; q. R  d! ~1 I& p( q  K  u3 v    返回列表中第一个非空表达式
/ |/ x9 I; A7 C) e- [7 p    select comm,sal,coalesce(comm,sal,sal*10) from emp;
  H6 l, ?, Z, B( g$ u" U    6.nvl2(ex1,ex2,ex3) :- m- J/ B+ V: r. j
    如果ex1不为空,显示ex2,否则显示ex3
# u: e" m4 y3 q7 F) u0 n    如:查看有佣金的雇员姓名以及他们的佣金6 J; j6 N) ^9 T$ t7 P
    select nvl2(comm,ename,') as HaveCommName,comm from emp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-8 01:24 , Processed in 0.182068 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表