【DM版本】:DM8
【操作系统】:CentOS 8
【CPU】:
【问题描述】*:
以下结果基于:
DM Version:8.1.2.128
JDBC:DmJdbcDriver18 - 8.1.2.192
基于 3楼提醒 将案例修改为非一致类型。
1.1、SQL 1
返回类型一致
select IF(true, DATE_FORMAT(NOW(), '%H%i%s'), '我是返回值') as col
1.2、SQL 2
返回类型非一致
select IF(true, DATE_FORMAT(NOW(), '%H%i%s'), null) as col
1.3、SQL 3
返回类型非一致
select IF(true, DATE_FORMAT(NOW(), '%H%i%s'), 1) as col
2.1、在 MySQL 中执行以下 SQL 1 可以得到结果,为当前的时间
col = 184726
2.2、在 MySQL 中执行以下 SQL 2
可以得到结果,为当前的时间
col = 184726
在 MySQL 中执行以下 SQL 2 ,条件结果为 false 时可以得到结果为 null
select IF(false, DATE_FORMAT(NOW(), '%H%i%s'), null) as col
结果
col = null
2.3、在 MySQL 中执行以下 SQL 3
可以得到结果,为当前的时间
col = 184726
在 MySQL 中执行以下 SQL 3 ,条件结果为 false 时可以得到结果为 1
select IF(false, DATE_FORMAT(NOW(), '%H%i%s'), 1) as col
结果
col = 1
3.1、在 DM8 中执行以下 SQL 1 可以得到结果,为当前的时间
col = 184726
3.2、在 DM8 中执行以下 SQL 2
返回错误信息
第1 行附近出现错误: 无法解析的成员访问表达式[IF]
在 DM8 中执行以下 SQL 2 ,条件结果为 false 时。
select IF(false, DATE_FORMAT(NOW(), '%H%i%s'), null) as col
返回错误信息
第1 行附近出现错误: 无法解析的成员访问表达式[IF]
3.3、在 DM8 中执行以下 SQL 3
返回错误信息
第1 行附近出现错误: 无法解析的成员访问表达式[IF]
条件结果为 false 时,DM8 返回错误信息
select IF(false, DATE_FORMAT(NOW(), '%H%i%s'), 1) as col
回错误信息
第1 行附近出现错误: 无法解析的成员访问表达式[IF]
好,那么在 DM8 下面,需要对结果进行判断返回为 null,或者达到与 MySQL 相同的场景结果时,得利用 decode 去规避。
select DECODE('true', 'true', date_format(NOW(), '%H%i%s'), null) AS col
以及三楼提供的方案
select IF(true, DATE_FORMAT(NOW(), '%H%i%s'), to_char(null)) as col
刚在“在线体验”试了一下,似乎可以
select IF(true, NOW(), '我是返回值') as col
这个报错,参数1和参数2 类型不一致。
这个参数1和参数2类型一致,是对的。
达梦兼容mysql不是100%的,达梦一直是oracle兼容为主。可以试试新版本
