sybase 和 mysql 轉換問題

sybase與mysql轉換問題

下面兼容性問題爲在動態報告分析程序告警過濾目的庫向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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章