下面兼容性問題爲在動態報告分析程序告警過濾目的庫向Mysql兼容的過程中涉及到的:
1、getdate() 函數問題
Mysql數據庫中,now() 函數可直接替換,如: select now() 或者 select now()+0
如果只需要日期,可用: select curdate() 或者 select curdate()+0
2、default getdate() 問題
mysql的時間日期字段,不能指定缺省值爲函數,如 now()或 curdate(),因此如果代碼邏輯上依賴數據庫的這個特點,需要修改
而timestamp類型字段,默認情況下,在insert和update會變更時間,
允許設置default now()來實現只在insert的時候賦值,但是在一個表中,卻只允許只有一個timestamp類型字段設置非常量的default值
因此,只能是修改所有"insert into tbCurAlarm"的地方,人工爲需要使用當前時間作爲缺省值的字段,顯義賦值now()
涉及到的字段有 dAlarmTimeStamp,dFirstAlarmTimeStamp,dLastAlarmTimeStamp,dLastUpdateTimeStamp
3、=CASE WHEN ... THEN ... ELSE ... END 語法
Mysql中,有對應的語法如下:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
4、dateadd() 函數問題
sybase中,dateadd函數有三個入參,如: dateadd(second,iAutoClearTtl,dLastAlarmTime)
Mysql中,有對應函數 date_add:
select date_add(now(),interval 1 second)
select date_add(now(),interval -1 hour)
select date_add(now(),interval -1 day)
select date_add(now(),interval iEmsId day) from tbEms
5、datediff 函數問題
sybase中,datediff函數有三個入參,如: datediff(ss,dLastClearTime,'$AlarmTime')
Mysql中,有對應函數 datediff,不過這個函數只是用來計算兩個時間量之間的天數差
函數 TimeStampDiff可用來替換sybase的DateDiff:
select TimeStampDiff(second,'2000-01-01 10:00:00','2000-01-01 09:00:00') => -3600
select TimeStampDiff(second,'2000-01-01 09:00:00','2000-01-01 09:00:01') => -1
參數的個數和格式基本是一樣的,可以直接替換(要注意sybase支持ss這樣的second簡寫,需要改爲全寫)。
6、convert 問題
convert(char(10),dAlarmTime,111)+' '+convert(char(8),dAlarmTime,108)
主要是保證查詢結果中的日期時間格式是長日期格式
MySQL缺省就是以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支持的範圍爲'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
7、getIdentity 問題
目前代碼邏輯中,沒有使用到 getIdentity 的邏輯
在sybase中,可利用identity的字段來在Insert的時候快速生成記錄的主鍵ID,然後用select identity 獲取該主鍵ID
oracle中,是利用sequence完成類似的用途,sequence.Nextval和sequence.Curval獲取主鍵序號。
8 sybase有isnull函數,而mysql是沒有isnull函數的如果要替換的話就用ifnull函數替換。
9 左右連接問題
在sybase數據庫中左右連接可以用:* 如:;a=*b;表示右連接
在oracle數據庫中表示方法不一樣:a=+b;
在mysql中表示只能用 a right join b on a=b;這種方法來表示
每個數據庫中的連接表示方法都不一樣。
10 top [number]
一般都放在select後面,在sybase中常用來查看產出數據的前面number 條數據,但是在mysql中沒有top關鍵字,用limit關鍵字來替換它,只不過要將limit 【number】放在查詢語句的最後面。
11 str_replace 字符串替換函數,在sybase常用,但是在mysql中用的是replace(str,char1,char2)