注册

DM8中IF函数不支持函数嵌套,与MySQL兼容性差。

Mosy 2023/08/22 1085 10 已解决

【DM版本】:DM8
【操作系统】:CentOS 8
【CPU】:
【问题描述】*:
以下结果基于:
DM Version:8.1.2.128
JDBC:DmJdbcDriver18 - 8.1.2.192

基于 3楼提醒 将案例修改为非一致类型。

1、SQL 场景

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.MySQL 测试结果

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、DM8 测试结果

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]

4、问题规避

好,那么在 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

极致兼容,带给你极致的体验。

dm8if.jpg

回答 0
暂无回答
扫一扫
联系客服