个人博客:http://demi-panda.com
修改表中的列信息:
alter table vendor_master modify(vencode varchar(20));
给表中列添加一个默认值约束
alter table mytable modify(name varchar2(20) default 'abc');
为现有表中的列添加一个主键约束:
alter table testtable add(constraint "idkey" primary key("ID"));
为现有的表添加一个列:
alter table vendor_master add(vid number(5));
为现有表删除一个列:
alter table vendor_master drop column vid;
删除一个表:
drop table vendor_master;
-- unio 返回两个查询选定的所有不重复的行。unio的使用
select vencode from vendor_master
union select vencode from order_master
--unio all返回两个查询选定的所有行,包括重复的行 ,unio all的使用
select vencode from vendor_master
union all select vencode from order_master
--intersect 返回两个查询都有的行,intersect 的使用
select vencode from vendor_master
intersect select vencode from order_master
--minus 的使用操作符只返回由第一个查询选定但是没有被第二个查
--询选定的行,也就是在第一个查询结果中排除在第二个查询结果中出现的行
select vencode from vendor_master
minus
select vencode from order_master
--- || 连接符的使用
select ('供应商'||venname||'地址为:'||venadd1||' '||venadd2||' '||venadd3) as 地址 from vendor_master
--使用DATE 关键字向数据库提供一个日期文本字符串,此日期必--须使用yyyy-mm-dd格式,以下代码演示了 date关键字;
insert into MYTABLE (ID, NAME, ADDRESS, EMAIL,REGDATE)
values (6, 'rose', 'tianjin', '[email protected]', date '2007-10-12')
--下列代码演示了通过 to_date() 函数返回的值添加到数据库中
insert into MYTABLE
(ID, NAME, ADDRESS, EMAIL,REGDATE)
values (6, 'rose', 'tianjin', '[email protected]', to_date('2007-10-23 12:36:58','yyyy-mm-dd hh24:mi:ss'))
-- add_month 的使用
select del_date ,add_months(del_date,2) from order_master
--months_between 的使用该函数返回两个日期之间的月数,格式为MONTHS_BETWEEN(d1,d2)
select to_date('2009-11-30','yyyy-mm-dd') from dual
select months_between(to_date('2009-12-31','yyyy-mm-dd'),to_date('2008-12-20','yyyy-mm-dd')) from dual
-- last_day的使用,该函数返回指定日期当月的最后一天的日期值,格式为LAST_DAY(d)
select sysdate,last_day(sysdate) from dual
-- ROUND, 格式为ROUND(d,[fmt]),d是日期,fmt是格式模型。
--fmt是一个可选项,日期默认舍入为最靠近的那一天。
--如果指定格式为年”YEAR”,则舍入到年的开始,即1月1日;如果格式为月”MONTH”,则舍入到月的第一日;如果格式为周”DAY”,则舍入到最靠近的星期日。
select round(to_date('2009-8-13','yyyy-mm-dd hh24:mi:ss'),'day') as m from dual
-- NEXT_DAY ,该函数返回指定的下一个星期几的日期,格式为
-- NEXT_DAY(d,day),d是日期,day指周内任何一天。
select next_day(sysdate,'星期五') from dual
--trunc函数将指定日期截断为由格式模型指定的单位的日期,
--与ROUND函数不同的是它只舍不入
select trunc(to_date('2009-12-12','yyyy-mm-dd'),'day') from dual
--函数提取日期时间类型中都特定部分,格式为
--EXTRACT(fmt FROM d)
select extract(year from sysdate) from dual
--根据ASCII码返回对应的字符
select chr(97) from dual
--LPAD 函数由三个参数 ,第一个参数是字符串,
--该字符串左边需要填充,第二个是数字,
--它表示返回值的总长度,第三个是字符串,
--需要时用它进行左填充。
Select lpad('function',10,'=') from dual;
--TRIM函数从字符串的开始或者结尾,裁剪特定的字符,默认裁剪空格
-- leading 表示从左往右,trailing 表示从右往左
-- leading和trailing 都不指定的情况下裁剪前后特定的字符
select trim(leading 9 from 99977589678999) from dual
select trim(9 from 99977589678999) from dual
--length 函数返回字符串的长度
select length('abcd') from dual
--decode 函数进行逐个值的替换
-- select decode(expr,search1,result1,search2,result2...[default])
select decode(2,1,'相同') from dual
-- to_char 转换字符串函数
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
-- to_date 日期转换函数
select to_date('2009-10-10 13:12:12','yyyy-mm-dd hh24:mi:ss') from dual
--将空值转换为指定的值,NVL(expression1,expression2)
select vencode,venname,nvl(venadd1,'no') from vendor_master
--NVL2 使用 (如果第一个参数不为空返回第二个参数,否则返回第三个参数)
select vencode,venname,nvl2(venadd1,'北京','没有地址') from vendor_master
--NULLIF 使用(判断两个参数是否相等,如果相等返回 null ,否则返回第一个参数)
select nullif(1,2) from dual
--使用 rollup 子句为每个分组返回一条小计,并为全部分组返回总计:
Select division_id,sum(salary),count(*) from employees2
Group by division_id
使用oracle 伪列删除表中重复记录:
delete testtable t where t.rowid!=(select max(t1.rowid) from testtable t1 where t1.name=t.name)
delete table t where t.rowid!=(select max(t1.rowid) from table t1 where t1.name=t.name)