Informix与db2排序时null值处理

客户的数据库从db2迁移到gbase 8t/informix,在测试存储过程中,发现存储过程能正常执行,但结果却是不正确的。
按存储过程中的SQL语句逐条执行对比,发现在使用到

SELECT ROW_NUMBER()OVER(PARTITION BY FID ORDER BY MID) AS PX,MID,FID  FROM FTAB

时,结果出现不一致。

db2的结果是

PX        MID        FID
1        M1        F1
1        M2        F2
2                F21
3                F22
4                F23
1        M3        F3
2                F32
3                F33

8t/informix的结果是

px        mid        fid
1        M1        F1
1                F2
2                F21
3                F22
4        M2        F23
1                F3
2                F32
3        M3        F33

两者明显的区别就是null的前后放置顺序。即两个数据库order by排序时对null值的默认处理方式不同:db2是null值为后,8t/informix是null值优先。
为了正常迁移,可通过指定order by排序时null值的处理方式nulls last/nulss first 以达到预期的需求。将该语句改成

SELECT ROW_NUMBER()OVER(PARTITION BY FID ORDER BY MID NULLS LAST) AS PX,MID,FID  FROM FTAB

标签: none

添加新评论

Free Web Hosting