1、[Err] ORA-00904: "DD": invalid identifier
select ... ... ... TO_CHAR(o.ADDTIME,yyyy-mm-dd)... ... ... from ... ... ...
解决:TO_CHAR(o.ADDTIME,‘yyyy-mm-dd’),单引号、双引号的问题
2、查询条件中有char(nchar)类型,查不出数据
如数据表中,某字段bklx nchar(4)
select。。。where bklx=‘补考’,会查不出数据
原因:oracle的JDBC在比较char(nchar)类型数据时,会自动补齐较短的数据
即数据库中存‘补考’,但实际查询的是select。。。where bklx=‘补考__’
解决:
a、select。。。where trim(bklx)=‘补考’
b、将char(nchar)改为varchar(nvarchar)
c、使用长度固定的内容
3、date与timestamp
date精确到秒;插入时间时要用:TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS'),查询时用select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
timestamp精确到0.001秒
参考:http://www.douban.com/note/31849478/
alter session set nls_date_format=可以直接用字符串写SQL语句。
如:alter session set nls_date_format= 'yyyy-mm-dd hh:mi:ss '
insert into a(atime) values( '2001-1-1 23:12:12 ')
4、where...group by...having
where是对哪些数据进行统计
having是 显示哪些统计结果
二、语句
1、一张表与自身内连接,如包含上下级关系的组织结构表,查出每个子类与子类父类名称的信息
a、直接内连接(稍快)
SELECT a.planID,a.parentid,b.deptNAME AS parentdeptname, b.sortno AS parentsortno,
a.deptNAME,a.stuCount,a.zydm,a.xuezhi,a.cengci,a.xuefei,a.zsdx,a.xzrlxdh,
a.leaf, a.sortno, a.remark
from csrecruitplan a,csrecruitplan b
where a.parentid = b.planID and a.leaf=1
order by parentsortno
b、(稍慢)
SELECT planID,parentid,
(SELECT deptNAME
FROM csrecruitplan
WHERE planID = a.parentid) AS parentdeptname,
(SELECT sortno
FROM csrecruitplan
WHERE planID = a.parentid) AS parentsortno,
deptNAME,stuCount,zydm,xuezhi,cengci,xuefei,zsdx,xzrlxdh,
leaf, sortno, remark
FROM csrecruitplan a where a.leaf=1
order by parentsortno
3、子查询为为一个字段---返回多条数据则报错
select a1,
(select c1 from c) as c3
(select d1 from d) as d3
from a
和多表查询的效率如何?