民航电子数据库:mysql与caedb(select语法差异)


前言

本篇记录mysql与民航电子数据库select语句的语法差异


语法差异

1、cae:date_add(date, INTERVAL num HOUR)函数中"num"不能为字段,只能是数值


2、cae:date_add()函数中不能再使用函数或运算表达式,但可以使用"+"号来对日期进行"天数"新增,默认新增单位:天数
SELECT date_add(ddate, INTERVAL IFNULL(receiveOverTime, 1) HOUR ) as overTime FROM t_order_info

使用"+"号来对日期进行"天数"新增,使用(小时数 / 24)来对日期进行"小时"新增,案例如下

SELECT ddate , ddate + IFNULL(receiveOverTime,1) as ddateAddDay , ddate + (1 / 24) as ddateAddHour FROM t_order_info


3、cae日期可以使用"+"号来对日期进行"天数"新增,默认新增单位:天数
SELECT ddate , ddate + IFNULL(receiveOverTime,1) as ddateAddDay , ddate + (1 / 24) as ddateAddHour FROM t_order_info


4、mysql的"日期"类型支持数值运行:"createTime > 0、createTime = 0",caedb不行
mysql:SELECT createTime FROM t_test WHERE createTime > 0
caedb:SELECT createTime FROM t_test WHERE UNIX_TIMESTAMP(createTime) > 0


5、mysql进行多表查询时可以多一个括号,cae不行
mysql:
SELECT
	a.c AS outQty,
	b.c AS inQty,
	( CASE 1 WHEN 1 = 1 THEN a.c + b.c END ) AS qty 
FROM
	(
		( SELECT count( ID ) AS c FROM t_sms_send WHERE vdnId = 1 AND createDate >= CURDATE() ) AS a,
	( SELECT count( ID ) AS c FROM t_sms_receive WHERE vdnId = 1 AND createDate >= CURDATE() ) AS b 
	)
	
	
caedb:
SELECT
	a.c AS outQty,
	b.c AS inQty,
	( CASE 1 WHEN 1 = 1 THEN a.c + b.c END ) AS qty 
FROM
	-- 这个括号要去掉 (
		( SELECT count( ID ) AS c FROM t_sms_send WHERE vdnId = 1 AND createDate >= CURDATE() ) AS a,
	( SELECT count( ID ) AS c FROM t_sms_receive WHERE vdnId = 1 AND createDate >= CURDATE() ) AS b 
	-- 这个括号要去掉)
	
	
6、mysql的"case when"语句"then"后边可以是表达式,cae只能是固定值


7、cae:在xml中date_add()函数无法为#{xxx}注入参数值,本例中#{hour}的值会是NULL
select xxx from t_xxx_xxx WHERE date_add(overTime, interval #{hour} HOUR) > #{now}


8、cae在group by分组后进行order by,只能再套一层select


9、cae如果是框架sharingjdbc + caedb,查询时字段名称支持双引号",如果没有shardingjdbc,则字段名称不支持双引号


10、cae:进行表连接时,表连接条件的字段类型必须一致,本例中:ext.chGroup为varchat类型,cg.id为integer类型

SELECT
	count( 0 ) 
FROM
	t_icip_base_extension ext
	LEFT JOIN t_icip_base_channelgroup cg ON ext.chGroup = cg.id
WHERE
	ext.VDN = 1
	
改为

SELECT
	count( 0 ) 
FROM
	t_icip_base_extension ext
	LEFT JOIN t_icip_base_channelgroup cg ON ext.chGroup = concat(cg.id,'') 
WHERE
	ext.VDN = 1
	
	
11、cae:在有group by分组统计的语句中,selete输出表达式含有非分组统计项,对应mysql的sql_mode=only_full_group_by
cae可以通过sql来查看分组模式:show def_group_by_mode
调整分组模式解决该问题:set def_group_by_mode to 1


12select返回的字段名称如果要区分大小写,定义名称时要加上单引号
select ID as 'id',WorkNO as 'workNo' from t_sys_users
注:使用mybatis查询返回的结果对象如果是JSONObject、Map,则需要指定别名大小写,如果是实体类则不需要区分大小写,字段名称会以实体类为准


13、程序报错:无法自动获取数据库类型,请通过 helperDialect 参数指定!
原因:是使用PageHelper.startPage(pageNo, pageSize)导致
解决:在application配置文件添加pagehelper.helper-dialect属性即可


14、UNIX_TIMESTAMP()函数使用有差异,如果不传参数,cae需要加上sysdate参数,并且返回的是13位的时间戳,而mysql返回的是10位的时间戳
caedb:Select UNIX_TIMESTAMP(sysdate) as 'timeStamp'
mysql:Select UNIX_TIMESTAMP() as 'timeStamp'


15IF()函数使用有差异,cae不支持表达式,需要使用表达式时可以用cae when代替
mysql、cae都支持:select if(false,1,0)
mysql、cae都支持:select if(false,true,false)
mysql支持、cae不支持:select if(false,1=1,0=0)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 04:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 04:30:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 04:30:02       82 阅读
  4. Python语言-面向对象

    2024-05-02 04:30:02       91 阅读

热门阅读

  1. 多线程常见使用

    2024-05-02 04:30:02       30 阅读
  2. leetcode第5题:最长回文子串

    2024-05-02 04:30:02       25 阅读
  3. 制作Android分区镜像

    2024-05-02 04:30:02       30 阅读
  4. k8s中,configMap与环境变量的关系

    2024-05-02 04:30:02       30 阅读
  5. 使用zookeeper作为分布式节点的配置中心

    2024-05-02 04:30:02       32 阅读
  6. 关于npm命令

    2024-05-02 04:30:02       28 阅读
  7. 【收录 Hello 算法】1.3 小结

    2024-05-02 04:30:02       35 阅读
  8. git忽略文件.gitignore如何使用?

    2024-05-02 04:30:02       34 阅读
  9. Agent AI智能体的未来【模板】

    2024-05-02 04:30:02       33 阅读
  10. android 启动优化方向跟踪

    2024-05-02 04:30:02       33 阅读