一、SQL中常遇到的一些问题
(1)、时间问题,orcle与Mysql对取当前时间的方式不用。
(2)、与MYsql有许多函数是不同的,但还是大体上一样的。
(3)、常遇到的错误大部分都可以从网上查找出解决办法,如 Every derived table must have its own alias:别名错误(别名尽量不要省),如Maximum call stack size exceeded:超出最大调用堆栈大小,问题是变量的值过长,这种情况下是取到的值问题。需要注意的是,网上的办法不一定都可以自己的解决,有的问题给出的提示相同,但错的不同。
(4)、常用到的知识点
1.orcle中语句进行查询时,子查询出来的字段命名为A,但进行字段统计相加时,直接+A错误,提示没有该字段,只能进行+子查询。
2.orcle进行完排序后使用rownum取前5条数据:SELECT A FROM (select A from 表1 where 1=1 order by A ) WHERE rownum<=5 。 rownum是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分页。类似于MYSQL和SQL SERVER的top。
orcle进行排序后取中间5-10条数据:SELECT A FROM (select A from 表1 where 1=1 order by A ) WHERE rownum<=10 and rownum>=5。
3.分组后编号rownum是不能实现的,需要使用row_num() over(partition by 分组字段 order by 排序字段)方法。如求表1中A字段进行分组并按A字段排序,并取前5条数据, select A* from ( select * , row_num() over(partition by A order by A desc) rn from test ) A where rn <=5
4.MYsql取前几条数据做个对比:方法有limit 使用取值。 select * from 表2 where 1=1 limit 5
排序完之后取5到10条数据 select * from 表2 where 1=1 limit 5,10
5.trunc函数的使用、TRUNC(for date)函数为指定元素而截去的日期值,TRUNC(for number)也可以截取数字。
round(number[,decimals]),是截取数字的函数,例如round(12.312,2) 截取小数点后两位,结果为12.31,需要注意round函数和 trunc函数不同,对截取的数字要四舍五入。
concat函数使用,连接字符串X和Y 。
replace(X,old,new)函数,在X中查找old,并替换成new 。
substr(X,start[,length]),字符串截取0到5位,substr(X,0,5)。
minus函数,是对查询结果集的减法。A minus B就意味着将结果集A去除结果集B中所包含的所有记录后的结果,即在A中存在,而在B中不存在的记录。
intersect函数,正好跟minus 相反,求两个函数的交集。当然minus 也可以求两个函数的交集但还是比直接使用这个函数麻烦一些的。