sybase 移植參考

2021-05-26 18:51:13 字數 3738 閱讀 7959

最近公司產品做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 解釋 資料庫名為要備份的資料庫...