数据库中的函数

函数
1字符函数

length函数

select length('abcd') from dual;

select length('abcd好') from dual;--5个字符
select lengthb('abcd好') from dual;--6个字节 一个汉字两个字节

trim函数 (去除空格函数)

select ltrim(' abcd') from dual;--截左边的空格
select rtrim(' abcd ') from dual;--截右边的空格
select trim(' abcd ') from dual;--截所有的空格
--如果字段类型是定长的,长度始终是规定的长度,所以查询的时候应该采用trim函数去掉空格

更全的用法见oracle中trim,ltrim,rtrim函数用法


substr函数 (截取字符函数)

select substr('abcdefg',2,3) from dual; --表示从第二个字符取,取三个字符
select substr('abcdefg',length('abcdefg')-3+1,3) from dual;--表示右取三个字符


REPLACE函数(字符串替代函数)
REPLACE('string','s1','s2')
--string   希望被替换的字符或变量
--s1       被替换的字符串
--s2       要替换的字符串
select replace('我的fid是22333','我','他') from dual; 结果为:他的fid是22333

 

translate函数(字符级替代函数)

字符替代函数

SELECT translate('acdd','cd','ef') FROM dual; --aeff  直接将字母c换为e,字母d换为f

如果是replace函数 SELECT REPLACE('acdd','cd','ef') FROM dual; --aefd  直接将cd换为ef

 

LOWER函数

返回字符串,并将所有的字符小写

 

UPPER函数

返回字符串,并将所有的字符大写

 

initcap函数

select initcap('ownership')  from G3E_ATTRIBUTE  --所选取的字段第一个字母用大写字母表示  

                                                                                                                                                               CONTACT函数 相当于||

select 'g3e_fid'||'设施特征唯一编号' a from G3E_ATTRIBUTE_BAK;  

select concat('g3e_fid','设施特征唯一编号') a from G3E_ATTRIBUTE_BAK;

 

instr函数   

INSTR(C1,C2,I,J)   在一个字符串中搜索指定的字符,返回发现指定的字符的位置;  

C1    被搜索的字符串  

C2    希望搜索的字符串  

I     搜索的开始位置,默认为1  

J     出现的位置,默认为1 

select instr('General Number','er',1,2) instring from G3E_ATTRIBUTE_BAK;    

J为2则选择的是Number中的er;结果为13   

J为1则选择的是General中的er;结果为4

 

RPAD和LPAD函数

RPAD(char1,n,char2)  在字符串char1的右边填充字符char2,直至字符串的总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符。

LPAD (char1,n,char2)在字符串char1的左边填充字符char2,直至字符串的总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符。                                                                                                                                select lpad(rpad('G3E_FID',12,'是111'),14,'我的')from DUAL;

--结果为:我G3E_FID是111--12和14表示粘贴字符后的字符数,如果超过规定的字符数就不粘贴了

 

CHR函数

ASCII 码值转换为字符

 select chr(45) from dual;结果为:-

 

ASCII函数

 ASCII(char):该函数用于返回字符串首字符的ASCII码值。 

 

2日期

sysdate --系统时间

select sysdate from dual;

 

current_date --当前时间

select current_date from dual;

 

next_day 返回指定日期的下一个指定日期

select next_day(sysdate,'星期一') from dual; 

返回:2010-8-30 17:35:01 (现在为2010-8-24 )8-30正好为下一个星期一

alter session set nls_date_format='dd-mon-yyy hh:mi:ss'

select next_day(sysdate,'星期六')from dual;--当前时间的下一个星期六

 

 

add_months

add_months(d,n)  查看特定时间的d之前n月或D之后N月的时间

select add_months(sysdate,-14) from dual; 结果为2009-6-24 16:53:57(当前系统时间2010-8-24 16:53:57)

 

current_timestamp 返回当前会话时区的日期时间

select current_timestamp from dual;结果为:24-8月 -10 04.57.06.593000 下午 +08:00

 

dbtimezone 返回数据库所在时区

select dbtimezone from dual;  结果为: +08:00

 

extract 用于从日期时间中提取所需的数据

 select extract(year from sysdate) from dual; 结果为2010

 

 FROM_TZ 用于将特定时区的timestamp值转为timestamp with time zone

select FROM_TZ(TIMESTAMP '2004-8-24 17:03:56','1:00') from dual;

结果为:24-8月 -04 05.03.56.000000000 下午 +01:00

 

last_day 返回特定日期所在月份的最后一天。

select last_day(sysdate) from dual; 

 

localtimestamp返回当前会话时区的日期时间

select localtimestamp from dual; 结果:24-8月 -10 05.17.20.750000 下午

 

months_between(d1,d2) 返回日期d1和d2之间相差的月数,若d1小于d2,返回负数,若d1和d2的天数相同或都是月底,返回整数

select months_between(sysdate,'8-8月-2008') from dual; 返回:24.5395725059737

 

new_time(date1,zone1,zone2):返回时区一的日期时间所对应的时区二的日期时间

select new_time(to_date('2010-8-24 17:28:35','yyyy-mm-dd hh24:mi:ss'), 'bst','est') from dual; 

返回:2010-8-24 23:28:35

 

 numtodsinterval(n,char_expr) 数字转换为时间,可转换为时、分、秒、天

char_expr可以是day,hour,minute,second

select numtodsinterval(1000,'minute') from dual; 1000转为分结果:+000000000 16:40:00.000000000

 

numtoyminterval(n,char_expr):将数字n转换为interval year to month格式,其中char_expr可以是year或month

select numtoyminterval(100000,'month') from dual;返回+000008333-04

 

sessiontimezone:返回当前会话所在时区

select sessiontimezone from dual;  返回+08:00

 

sys_extract_utc(datetime_with_timezone):返回特定时区时间所对应的格林威治时间

select sys_extract_utc(systimestamp) from dual;  返回24-8月 -10 11.54.09.015000 上午

 

systimestamp 返回当前系统的日期时间和时区

select systimestamp from dual;返回24-8月 -10 07.55.46.828000 下午 +08:00

 

ROUND和TRUNC函数

ROUND(n,[m]):该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位。

TRUNC(n,[m]) 该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是整数,则将数字n截取至小数点后的第m位;如果数字m是负数,则将数字n截取至小数点的前m位。

 

to_dsinterval(char[,'nls_param']) 将符合特定日期和时间格式的字符串转变为interval day to second 类型

select TO_DSINTERVAL('100 10:00:00') from dual; 返回:+000000100 10:00:00.000000000

 

to_timestamp 将符合特定日期和时间格式的字符串转变为timestamp类型

select to_timestamp('03-8月-10') from dual;返回:03-8月 -10 12.00.00.000000000 上午

 

to_timestamp_tz 将符合特定日期和时间格式的字符串转变为timestamp with time zone类型

select to_timestamp_tz('2003-08-10','yyyy-mm-dd') from dual;返回:10-8月 -03 12.00.00.000000000 上午 +08:00

 

to_yminterval(char): 将字符串转变为interval year to month类型

 select sysdate+to_yminterval('01-01') from dual;

返回当前时间的一年零一个以后的时间:2011-9-24 20:13:20

 

tz_offset 用于返回特定时区与UTC(格林威治时间)相比的时区偏移

select tz_offset('EST') from dual; 返回:-04:00 

 

3转换

to_char,to_date,to_number,cast

 select sysdate from dual;

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

select to_date('12-3月-04') from dual;select to_number('3333') from dual;

 cast(expr as type_name):该函数用于将一个内置数据类型或集合类型转变为另一个内置数据类型或集合类型。

 

select gwm_ano, cast( gwm_ano as varchar2(50) ) cat from gwm_attribute;

 

 

4聚集函数

sum,avg,max,min,count

COUNT()函数 

SELECT COUNT(au_lname) FROM authors

 

AVG()函数   

SELECT AVG(vote) FROM opinion 

函数AVG()只能对数值型字段使用

 

SUM()函数   

SELECT SUM(purchase_amount) FROM orders

MAX()函数    SELECT MAX(vote) FROM opinion

MIN()函数    SELECT MIN(vote) FROM opinion

 

5、数字函数

ABS函数

ABS(n),该函数用于返回数字n的绝对值。示例如下,
declare
  v_abs number(6,2);
begin
  v_abs:=abs(&no);
  dbms_output.put_line('绝对值:'||v_abs);
end;
输入no的值:-12.6,
绝对值:12.6   

ASIN函数

ASIN(n):该函数用于返回数字n的反正弦值,输入范围范围-1-1,输出值的单位为弧度。示例如下:
declare
  v_asin number(6,3);
begin
  v_asin:=asin(.3);
  dbms_output.put_line('0.3的反正弦值:'||v_asin);
end;
0.3的反正弦值:.305                                                                                                                         

ACOS函数

 ACOS(n):该函数用于返回数字n的反余弦值,输入值的范围-1-1,输出值的单位为弧度。示例如下:
select acos(.3),acos(-.3) from dual;  

TAN函数

TAN(n)该函数用于返回数字n(以弧度表示的角)的正切值。

TANH函数

TANH(n)该函数用于返回数字n(以弧度表示的角)的双曲正切值。

ATAN函数

ATAN(n):该函数用于返回数字n的反正切值,输入值范围可以是任何数字,输出值的单位为弧度。示例如下:
select atan(59),atan(55) from dual;  

ATAN2函数

ATAN2(n,m):该函数用于返回数字n除以数字m的反正切值。输入值除了m不能为0外,可以是任意数字(m不能为0),输出值的单位为弧度。示例如下:

declare
  v_atan2 number(6,3);
begin
  v_atan2:=atan2(19,3);
  dbms_output.put_line('19/3的反正切值:'||v_atan2);
end;
19/3的反正切值:1.414 

CEIL函数

返回大于或等于给出数字的最小整数      

select ceil(3.1415927) from dual;  

SIN函数

SIN(n)该函数用于返回数字n(以弧度表示的角)的正弦值。

SINH函数

SINH(n)该函数用于返回数字n的双曲余弦值。 

COS函数

 COS(n):该函数用于返回数字n(以弧度表示的角度值)的余弦值。
declare
  v_cos number(6,3);
begin
  v_cos:=cos(0.5);
  dbms_output.put_line('0.5的余弦值:'||v_cos);
end;
0.5的余弦值:.878

COSH函数

 COSH(n):该函数用于返回数字n的双曲余弦值。示例如下:
select cosh(0) "0的双曲余弦值" from dual;

 EXP函数

 

EXP(n):该函数用于返回e的n次幂(e=2.71828183。。。)。示例如下:
declare
  v_exp number(6,2);
begin
  v_exp:=exp(4);
  dbms_output.put_line('e的4次方:'||v_exp);
end;

e的4次方:54.

SQRT函数

 

SQRT(n)该函数用于返回数字n的平方根,并且数字n必须大于等于0。 

FLOOR函数

该函数用于返回小于等于数字n的最大整数

select floor(2345.67) from dual;   2345 

LN函数

LN(n):该函数用于返回数字n的自然对数,其中数字n必须大于0。示例如下:
declare
  v_ln number(6,2);
begin
  v_ln:=ln(4);
  dbms_output.put_line('4的自然对数:'||v_ln);
end;
4的自然对数:1.39  

LOG函数

LOG(m,n):该函数用于返回数字m为底的数字n的对数,数字n可以是除0和1以外的任何正整数,数字n可以是任何正整数。示例如下:

select log(2,8),log(10,100) from dual; 

MON函数

MON(m,n):该函数用于取得两个数字相除后的余数。如果数字n为0,则返回结果为m。
declare
  v_mod number(6,2);
begin
  v_mod:=mod(10,3);
  dbms_output.put_line('10除3的余数:'||v_mod);
end;
10除3的数:1  

POWER函数

 POWER(m,n):该函数用于返回数字m的n次幂,底数m和指数n可以是任意数字。但是如果数字m为负数,则数字n必须大于整数。   

SIGN函数    取数字n的符号,大于0返回1,小于0返回-1,等于0返回0   

posted on 2014-02-24 09:31  贤之灵  阅读(479)  评论(0编辑  收藏  举报

导航