下面兼容性问题为在动态报告分析程序告警过滤目的库向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)