sybase 移植参考

最近公司产品做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

二、相关对应函数

1if-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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值