SYBASE、ORACLE函数对比
Sysdate
Oracle取系统时间用“select sysdate from dual”查询语句。
Sybase取系统时间用“select getdate()”查询语句。
Decode
Oracle的“select decode(IPAddressB,null,' ',IPAddressB) from res”语句,对应Sybase的“select case when IPAddressB is null then ' ' else IPAddressB end from res”语句。
to_char(…,'d')
Oracle的“to_char(b.CfgFileGotTime,'d')”语句,对应Sybase的“DATEPART(dw,b.CfgFileGotTime)”语句。
Nvl
Oracle的“nvl(NODECODEA,'NOD007')='NOD007'”语句,对应Sybase的“isnull(NODECODEA,'NOD007')='NOD007'”语句。
Substr
Oracle的“select substr('abcd',2,2) value from dual”语句,对应Sybase的“select substring('abcd',2,2) value”语句。
Instr
Oracle的“select nodecode from Node where instr('"+nodefullcode+"',nodefullcode)>0)”语句,对应Sybase的“select nodecode from Node where CHARINDEX(nodefullcode,'"+nodefullcode+"')>0)”语句
外连接(+)
oracle中:select * from roleinfo a ,func_role b where a.roleid=b.roleid(+); 对应
sybase中:select * from roleinfo a,func_role b where a.roleid*=b.roleid;
注意:禁止使用left join做外连接,oracle8i不兼容。
求两日期某一部分的差
Oracle的“select ceil((sysdate - a.downoccurtime)*24*60) BREAKDOWNTIMESPAN from Device a”语句,对应Sybase的“select datediff(Minute,a.downoccurtime,getdate() ) BREAKDOWNTIMESPAN from Device a”语句。
Sybase中,除了“Minute”,还可以取“second”“hour”“day”“week”“month”“year”等值。
别名(alice)的使用
Sybase数据库中Insert、update、delete操作,数据库表不能使用alice。比如 delete res r where r.resid='' 是错误的。必须写成delete res where resid=''
Sybase数据库中,嵌套查询,字段不得使用alice。例如select * from roleinfo where roleid in (select roleid roleid from func_role);是错误的。必须写成 select * from roleinfo where roleid in (select roleid from func_role);
Insert方法
Oracle的“insert into UserResAuth (select 'tttt',nodecode,restypeid,resid,authtype from UserResAuth where netuserid = 'qq');”语句,对应于Sybase数据库中,“insert into UserResAuth (netuserid,nodecode,restypeid,resid,authtype) (select 'tttt',nodecode,restypeid,resid,authtype from UserResAuth where netuserid = 'qq');”
Insert的表名必须写清楚列名。