sybase 移植参考

来源:互联网 发布:网络信号发生器 编辑:程序博客网 时间:2024/05/20 19:18
 

最近公司产品做sybase移植,使其可以支持sybase.oracle数据库.工作过程中总结了一些sql 上的区别,

 

一 、日期时间:
1)将时间字段变成类“20060707121230”的字符串
Sybase
convert(char(8),R.Recordtime,112)+substring(convert(char(8),R.Recordtime,108) ,1,2) +
substring(convert(char(8),R.Recordtime,108) ,4,2)+substring(convert(char(8),R.Recordtime,108) ,7,2)
oracle:
to_char(R.Recordtime,'RRRRMMDDHH24MISS')
Mysql:
 
Perl:将20060707121230 变为20060707 12:12:30
substr($EndTimeString,0,8)." ".substr($EndTimeString,8,2).":".
                substr($EndTimeString,10,2).":".substr($EndTimeString,12,2);
 
2)日期比较:
 
Oracle:
R.RecordTime>=to_date('$BPTimeString','RRRRMMDDHH24')
Sybase:
R.RecordTime>=convert(datetime,'$BPTimeString')
AND R.HourID>='20060705 00:00:00' AND R.HourID<='20060707 00:00:00'
类mysql 参数也可为’ 20060705’/’2006070512’之类的
Mysql:
R.RecordTime>='$BPTimeString'
R.HourID>(类2006070514)='20060714 00:00:00'/’20060714’/’2006071412’ AND R.HourID<='20860715 00:00:00'
 
DayID>='20060705' and DayID<='20060707' 不可多余(mysql sybase)
 
3)日期加减
Oracle:
add_months(sysdate,-1),
 
Sybase:
dateadd(month,-1,getdate())上个月
dateadd (dd,16,getdate() )
dateadd (dd,16,'2006/06/14')
Mysql:
DATE_SUB(now(), INTERVAL 1 MONTH) 上个月
DATE_ADD(NOW(), INTERVAL 1 MONTH)); 下个月 时间间隔加到一个给定的日期
MONTH(birth) = MOD(MONTH(NOW()), 12) + 1 下个月过生日的.
MONTH返回在1和12之间的一数字,MOD(something,12)返回在0和11之间的一个数字
 
4)得到当前系统日期
Oracle:
sysdate
 
Sybase:getdate()
Mysql: now()
5)日期间差值
Oracle:
sysdate
 
Sybase:
Datediff(yy,”1984”,”1994”)
 
Mysql:
(TO_DAYS(NOW())-TO_DAYS(birth))
 
6)日期分量
 
Oracle:
 
Sybase:
Year yy 1753-9999
Quarter qq 1-4
Month mm 1-12
Week wk 1-54
Day dd 1-31
Dayofyear dy 1-366
Weekday dw 1-7(周日到周六)
Hour hh 0-23
Minute mi 0-59
Second ss 0-59
Millisecond ms 0-59
 
周数日期分量:美国英语
Cwk 1-52
Cyr 1753-9999
Cdw 1-7
 
Mysql:
now()
7)日期部分的提取函数
 
Oracle:
 
Sybase:
Datepart(yy,’1/1/1989’)
Datepart(yy,'1989/1/1') 1989
Datepart(month,getdate()) 7  整数
datename(month,getdate()) July ASCII字符串
 
Mysql:
 
YEAR()MONTH()DAYOFMONTH()。参数为日期型值
 
 
 
8)日期转化成字符串
 
Oracle:
to_char(sysdate,'yyyymmdd') 转成类20060717          to_char(R.RecordTime,'RRRRMMDDHH24')转成类2006071718 
 
Sybase:
convert(char(8),getdate(),112 ) 转成类20060717
convert(char(8),getdate(),108) 输出类12:09:18
 
Mysql:
 
DATE_FORMAT(now(), '%Y%m%d%H%i%S')转化成类20060717123456

二、相关对应函数

1)类if-then-else函数

Oracle:

decode(casevalue,condition1,value1,condition2,value2,defaultvalue)

 

Sybase:

case casevalue

when condition1 then value1
 when condition1 then value1                    
 else defaultvalue
 end  

 

Mysql:

case casevalue

when condition1 then value1
 when condition1 then value1                    
 else defaultvalue
 end  

 

2)截取子串函数

 

Oracle:

substr(string,1,8)

 

Sybase:

substring(string,1,8)

 

Mysql:

substring(string,1,8)