最近公司產品做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)
sybase裝置級別的資料庫移植
sybase ase12.5 以上版本公升級到 ase15 的第三種辦法 sybase 公司的產品 adapter server 目前最新的版本是 ase15.0.2 如何將原有的 ase12.5 上的資料庫公升級到 ase15 上?以前常用的方法有如下兩種 1.upgrade 2.dump loa...
sybase備份與恢復及sybase常用語句
sybase備份有兩種方式,一種是對單錶進行備份,一種是對整個資料庫進行備份 1 單錶備份與恢復 只需要使用sybase提高的bcp命令就可以了 bcp的命令格式 bcp 資料庫名.表名 in out 檔案名字 usa ppassword s servername c 解釋 資料庫名為要備份的資料庫...
sybase備份與恢復及sybase常用語句
sybase備份有兩種方式,一種是對單錶進行備份,一種是對整個資料庫進行備份 1 單錶備份與恢復 只需要使用sybase提高的bcp命令就可以了 bcp的命令格式 bcp 資料庫名.表名 in out 檔案名字 usa ppassword s servername c 解釋 資料庫名為要備份的資料庫...