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