- 浏览: 361124 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (55)
- java基础 (18)
- oracle (13)
- PL/SQL (8)
- Hibernate (3)
- JDBC (1)
- JVM (1)
- Dump (1)
- windows (2)
- struts2 (2)
- SQL (3)
- OGNL (1)
- Web前端 (3)
- 开发工具 (4)
- weblogic (0)
- shell (0)
- linux (1)
- windows,项目实施 (0)
- eclipse (3)
- SVN (1)
- vmware (2)
- 虚拟机 (2)
- hadoop (0)
- Android (0)
- 大数据 (2)
- Jquery (3)
- js (5)
- js,ajax (4)
- CKeditor (1)
- HTML (1)
- mysql (0)
最新评论
-
alangxi:
非常详尽,非常感谢。
BigDecimal 使用方法详解 -
nich002:
内容很详尽。
BigDecimal 使用方法详解 -
nich002:
看着真蛋疼。
BigDecimal 使用方法详解 -
zhangyinhu8680:
jz20110918 写道想问问楼主,sqlserver的 S ...
Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法 -
zhangyinhu8680:
数据库我只用过oracle,sqlServer我我没有接触过, ...
Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法
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函数去掉空格
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
6、10g新增函数
Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式
四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法类似,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
这四个函数支持正则表达式
正则表达式字符说明:
特殊字符含义:
'^' 表示字符串的开始
'$' 表示字符串的结束
'.' 表示任何字符
字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
'?' 允许一个后继字符匹配零次或一次
'+' 允许一个后继字符匹配一次或多次
'*' 表示零次或多次
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
[^...]:匹配字符集以外的任意字符。例如:[^a-f] 匹配 a 到 f 以外的任意字符。
[...]:匹配一个字符集中的任意字符。在字符集中使用短划线分隔第一个字符和最后一个字符。例如:
[123] 匹配数字 1、2 或 3
[a-f] 匹配从 a 到 f 的任意字母
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
各种操作符的运算优先级
转义符/
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
| “或”操作
具体的可见 http://www.google.com/support/a/bin/answer.py?hl=zh-CN&answer=1371415
测试数据:
create table test5(mc varchar2(60));
insert into test5 values('112233445566778899');
insert into test5 values('22113344 5566778899');
insert into test5 values('33112244 5566778899');
insert into test5 values('44112233 5566 778899');
insert into test5 values('5511 2233 4466778899');
insert into test5 values('661122334455778899');
insert into test5 values('771122334455668899');
insert into test5 values('881122334455667799');
insert into test5 values('991122334455667788');
insert into test5 values('aabbccddee');
insert into test5 values('bbaaaccddee');
insert into test5 values('ccabbddee');
insert into test5 values('ddaabbccee');
insert into test5 values('eeaabbccdd');
insert into test5 values('ab123');
insert into test5 values('123xy');
insert into test5 values('007ab');
insert into test5 values('abcxy');
insert into test5 values('The final test5 is is is how to find duplicate words.');
commit;
REGEXP_LIKE函数
select * from test5 where regexp_like(mc,'^a{1,3}');
select * from test5 where regexp_like(mc,'a{1,3}');
select * from test5 where regexp_like(mc,'^a.*e$');
select * from test5 where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test5 where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test5 Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test5 Where REGEXP_LIKE(mc,'^[^[:digit:]]');
REGEXP_INSTR函数
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test5; 112233445566778899
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test5;
Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;
REGEXP_SUBSTR函数
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test5;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test5;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
REGEXP_REPLACE函数
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
7其他
select user from dual;--查询当前用户
decode函数
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
select sum(decode('sex','男',1,0)) 男人数,sum(decode('sex','女',1,0)) 女人数 from e;
sign()函数
根据某个值是0、正数还是负数,分别返回0、1、-1;
nvl函数
NVL函数的格式如下:NVL(expr1,expr2)
含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值select a1,nvl(a2,'未输入'),a3 from aa;--处理空值
NVL2函数
NVL2函数的格式如下:NVL2(expr1,expr2, expr3)
含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。
NULLIF函数
NULLIF(expr1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。
Coalesce函数
Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。
格式如下:Coalesce(expr1, expr2, expr3….. exprn)Coalesce是这样来处理这些参数的。如果第一个参数为空,则看第二个参数是否是空,否则则显示第一个参数,如果第二个参数是空再看第三个参数是否为空,否则显示第二个参数,依次类推。这个函数实际上是NVL的循环使用
sys_guid ()函数
在Oracle 8i以后提供sys_guid ()方法
方法作用:
系统根据当前时间和机器码,生成全球唯一的一个序列号。
方法使用场景:
这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用,因为这样可以防止主键冲突。
因为采用sequence的话,只能保证在同一个数据中该序列号唯一,但是在不同的数据库实例中有可能冲突。
该方法的弊端:
由于sys_guid ()生成的序列号过长,这会消耗数据库存储空间,且管理不方便。
基于此,在非并行环境下的数据库应用中,应尽量避免使用sys_guid ()
方法举例:
select sys_guid() from dual;
-------------------------------------------
6E3DC539CF7944E7BC4650D0EEF06865
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函数去掉空格
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
6、10g新增函数
Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式
四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法类似,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
这四个函数支持正则表达式
正则表达式字符说明:
特殊字符含义:
'^' 表示字符串的开始
'$' 表示字符串的结束
'.' 表示任何字符
字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
'?' 允许一个后继字符匹配零次或一次
'+' 允许一个后继字符匹配一次或多次
'*' 表示零次或多次
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
[^...]:匹配字符集以外的任意字符。例如:[^a-f] 匹配 a 到 f 以外的任意字符。
[...]:匹配一个字符集中的任意字符。在字符集中使用短划线分隔第一个字符和最后一个字符。例如:
[123] 匹配数字 1、2 或 3
[a-f] 匹配从 a 到 f 的任意字母
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
各种操作符的运算优先级
转义符/
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
| “或”操作
具体的可见 http://www.google.com/support/a/bin/answer.py?hl=zh-CN&answer=1371415
测试数据:
create table test5(mc varchar2(60));
insert into test5 values('112233445566778899');
insert into test5 values('22113344 5566778899');
insert into test5 values('33112244 5566778899');
insert into test5 values('44112233 5566 778899');
insert into test5 values('5511 2233 4466778899');
insert into test5 values('661122334455778899');
insert into test5 values('771122334455668899');
insert into test5 values('881122334455667799');
insert into test5 values('991122334455667788');
insert into test5 values('aabbccddee');
insert into test5 values('bbaaaccddee');
insert into test5 values('ccabbddee');
insert into test5 values('ddaabbccee');
insert into test5 values('eeaabbccdd');
insert into test5 values('ab123');
insert into test5 values('123xy');
insert into test5 values('007ab');
insert into test5 values('abcxy');
insert into test5 values('The final test5 is is is how to find duplicate words.');
commit;
REGEXP_LIKE函数
select * from test5 where regexp_like(mc,'^a{1,3}');
select * from test5 where regexp_like(mc,'a{1,3}');
select * from test5 where regexp_like(mc,'^a.*e$');
select * from test5 where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
select * from test5 where regexp_like(mc,'^[[:lower:]]');
Select mc FROM test5 Where REGEXP_LIKE(mc,'[^[:digit:]]');
Select mc FROM test5 Where REGEXP_LIKE(mc,'^[^[:digit:]]');
REGEXP_INSTR函数
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test5; 112233445566778899
Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test5;
Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;
Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;
Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;
REGEXP_SUBSTR函数
SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test5;
SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test5;
SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;
REGEXP_REPLACE函数
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;
7其他
select user from dual;--查询当前用户
decode函数
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
select sum(decode('sex','男',1,0)) 男人数,sum(decode('sex','女',1,0)) 女人数 from e;
sign()函数
根据某个值是0、正数还是负数,分别返回0、1、-1;
nvl函数
NVL函数的格式如下:NVL(expr1,expr2)
含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值select a1,nvl(a2,'未输入'),a3 from aa;--处理空值
NVL2函数
NVL2函数的格式如下:NVL2(expr1,expr2, expr3)
含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。
NULLIF函数
NULLIF(expr1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。
Coalesce函数
Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。
格式如下:Coalesce(expr1, expr2, expr3….. exprn)Coalesce是这样来处理这些参数的。如果第一个参数为空,则看第二个参数是否是空,否则则显示第一个参数,如果第二个参数是空再看第三个参数是否为空,否则显示第二个参数,依次类推。这个函数实际上是NVL的循环使用
sys_guid ()函数
在Oracle 8i以后提供sys_guid ()方法
方法作用:
系统根据当前时间和机器码,生成全球唯一的一个序列号。
方法使用场景:
这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用,因为这样可以防止主键冲突。
因为采用sequence的话,只能保证在同一个数据中该序列号唯一,但是在不同的数据库实例中有可能冲突。
该方法的弊端:
由于sys_guid ()生成的序列号过长,这会消耗数据库存储空间,且管理不方便。
基于此,在非并行环境下的数据库应用中,应尽量避免使用sys_guid ()
方法举例:
select sys_guid() from dual;
-------------------------------------------
6E3DC539CF7944E7BC4650D0EEF06865
发表评论
-
Oracle的rollup、cube、grouping sets函数
2015-06-17 11:22 5113文章转自 http://blog.csdn.net/huan ... -
Oracle的Replace函数与translate函数详解与比较
2014-12-10 14:12 1320Oracle的Replace函数与translate函数详解与 ... -
hibernate通过映射文件生成表结构
2013-05-12 14:38 0文章来自 http://dianziermu. ... -
ORA-01219 :数据库未打开:仅允许在固定表/视图中查询 解决!
2013-01-26 01:01 18015ORA-01219:database not open:que ... -
Oracle同义词
2012-12-14 16:46 0Oracle同义词的创建与删除(2012-03-20 22:1 ... -
exp 用户名/密码@数据库名
2012-10-28 13:07 0在oracle中的bin目录下 exp ... -
恢复到update或者delete之前的数据(非常重要)
2012-10-22 20:28 0首先要开启ROW MOVEMENT功能 SQL>ALTE ... -
函数Ratio_to_reportde 的使用方法(举例说明)
2012-10-08 18:45 0分析函数Ratio_to_report( ) over()使用 ... -
Oracle中的MINUS和UNION用法(转)
2012-10-23 11:26 7997Oracle中的MINUS和UNION用法(转)Oracle中 ... -
oracle递归查询即树查询
2012-07-30 14:53 5849oracle树查询又称为递归查询,是最常用的查询方法之一,下文 ... -
Oracle 表删除恢复
2012-07-02 13:36 2014在Oracle 10g数据库中,引入了一个回收站(Recycl ... -
Oracle Connect By用法
2012-06-26 16:58 0oracle中的select语句可以 ... -
SQL 在常用报表业务中的归并、转换与信息汇总中的应用技巧
2012-06-06 22:24 1831本文阐述并分步骤汇总了 SQL 数据库报表系统中最常见的三类典 ... -
Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法
2012-05-29 13:08 30484Oracle SQL中实现indexOf和lastIndexO ... -
oracle SELECT INTO 和 INSERT INTO SELECT 区别
2012-05-10 13:16 3248我们经常会遇到需要表复制的情况,如将一个table1的数据的部 ... -
如何一条SQL快速生成100万条测试数据 .
2012-04-22 11:09 3723创建大量的测试数据,动不动就需要上万条,如何通过一条SQL快速 ... -
oracle sql语句优化
2012-04-22 11:02 1417oracle sql语句优化(转载) (1) ... -
decode函数使用
2012-04-22 11:02 1278DECODE函数,是ORACLE公司的SQL软件ORACLE ...
相关推荐
包含了oracle所有的函数 例如replace to_char date等67个函数
以下是一些常见的Oracle数据库函数,包括它们的用途和示例: 1. ASCII 函数:这个函数返回与给定字符对应的ASCII码,即十进制数值。例如,ASCII('A') 返回65,ASCII('a') 返回97,ASCII('0') 返回48,ASCII(' ') ...
本文将深入探讨SQL和Oracle数据库中的函数,以帮助初学者更好地理解和运用这些工具。 SQL函数是处理数据库数据的基本操作单元,它们允许我们执行计算、转换和数据提取。常见的SQL函数包括: 1. **聚合函数**:如`...
对Oracle数据库所使用的函数进行了总结,可以速查这些函数的用法并且附带例子
Oracle数据库的SQL函数是数据库查询和管理中不可或缺的一部分,它们极大地丰富了SQL语言的功能,使得数据处理更加灵活和高效。以下是一些常见的Oracle SQL函数及其详细说明: 1. ASCII函数:ASCII函数返回一个字符...
oracle函数库大全
主要整理了oracle数据库中的函数内容,毕竟sql用函数比较快
包含所有Oracle常用函数及使用说明
在本概述中,我们将详细介绍Oracle数据库中常用的数值函数、字符函数、日期函数以及转换函数等。 首先,函数在数据库中的作用是多方面的。它们可以方便地进行数据的统计分析,简化复杂的数据处理流程,同时也可以...
一、Oracle数据库函数大全 Oracle数据库支持丰富的函数,用于处理各种数据类型和执行复杂的计算。以下是一些常见的函数类别: 1. 数学函数:如`ROUND()`用于四舍五入,`SQRT()`用于求平方根,`MOD()`用于取模运算...
该脚本包含递归查询、删除数据表中重复数据、分组取最大记录,行列互转、多行合并等不常见但是非常实用的oracle函数并附带详细的实例持续更新中
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本资源“Oracle数据库系统应用与开发”深入探讨了Oracle数据库的使用和开发技术,特别关注...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。这份"Oracle数据库编程pdf文档教案"提供了从基础到高级的Oracle学习路径,通过5天的学习内容,帮助读者深入理解并掌握...
易语言,作为一种简洁易学的编程语言,提供了与Oracle数据库交互的能力,使得开发者可以方便地进行数据存取、查询和管理。本文将详细介绍如何使用易语言连接Oracle数据库,并探讨相关组件的使用。 首先,连接Oracle...
在LabVIEW中,你可以使用“数据库工具”库中的“创建ODBC连接”函数来建立到Oracle数据库的连接。确保已安装Oracle的ODBC驱动,并在系统ODBC数据源管理器中配置好数据源。 一旦连接成功,我们可以执行SQL命令来操作...
Oracle数据库是甲骨文公司推出的一个功能强大的关系数据库管理系统,它广泛应用于金融、电信、制造等行业。Oracle数据库试题能够帮助相关岗位的应聘者或者数据库管理人员加深对Oracle数据库的理解。本次提供的100题...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心优势之一。在Oracle中,函数被用于处理和操作数据,提供了一系列工具,使得数据查询、计算和转换变得更为便捷。以下是一些...
### C# 版 Oracle 数据库通用操作类解析 在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。...
Oracle数据库空间数据类型和空间函数扩展实现 Oracle数据库是当前最流行的关系型数据库管理系统之一,对于空间数据的存储和查询提供了良好的支持。为了满足空间数据处理的需求,Oracle数据库扩展了空间数据类型和...