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)

你可能感兴趣的:(工作笔记)