snowflake 中的日期差函数为 DB2 中的相同查询再提供一次计数

Date difference function in snowflake is giving one more count for same query in DB2

提问人:Prabhash Mishra 提问时间:11/10/2023 更新时间:11/10/2023 访问量:46

问:

我们正在从 DB2 迁移到 Snowflake。对于 DB2 和 snowflake 中的相同查询,snowflake 的 datediff() 为某些值提供比 1 更多的计数,而不是所有值都归入 DB2 的 Days()。大多数值都是匹配的。我在 java 中动态生成查询并将其发送到雪花以执行。

Db2 查询:

Select 
'1' as fromPattern, Cast(p1.patternnumber as varchar(20)) as fromCode,
'2' as toPattern, Cast(p2.patternnumber as varchar(20)) as toCode,
Cast(Cast(count(*) as Integer) as varchar(20)) as num,
Cast(Cast(avg(Days(p2.datepointer) - Days(p1.stopdate)) as Integer) as varchar(20)) as avgGap 
from TenMillion_20220731.NS8661_562_20231109_104300_097 p1 
join TenMillion_20220731.NS8661_564_20231109_104338_543 p2 on p1.personid=p2.personid 
group by p1.patternnumber, p2.patternnumber 
order by fromPattern, toPattern, fromCode, toCode

Snowflake查询:

Select 
'1' as fromPattern, Cast(p1.patternnumber as varchar(20)) as fromCode,
'2' as toPattern, Cast(p2.patternnumber as varchar(20)) as toCode,
Cast(Cast(count(*) as Integer) as varchar(20)) as num,
Cast(Cast(avg(datediff(day,p1.stopdate,p2.datepointer)) as Integer) as varchar(20)) as avgGap 
from TenMillion_20220731.NS10386_147_20231108_235900_717 p1 
join TenMillion_20220731.NS10386_149_20231108_235900_717 p2 on p1.personid=p2.personid 
group by p1.patternnumber, p2.patternnumber 
order by fromPattern, toPattern, fromCode, toCode 

Db2 输出:enter image description here

SnowFlake输出:enter image description here

DB2 的 AVGGAP 列是日期差列,在 DB2 中值为 619 和 340,但在 snowflake 中分别为 620 和 341。除两个值外,其他值匹配。

谁能帮我理解为什么相同的函数给出相同和不同的值。理解这个问题很重要,因为它在我们的应用程序中数据不匹配,需要向供应商澄清。请帮忙。

谢谢 普拉巴什·米什拉

java sql db2 snowflake-schema

评论

0赞 tinazmu 11/10/2023
您确定 DatePointer 和 StopDate 只包含日期而不包含时间部分吗?
0赞 Prabhash Mishra 11/10/2023
不,db 中没有时间部分。
1赞 tinazmu 11/10/2023
它只有 29 个条目,为该子集选择单个值(聚合),然后查看哪个不同(如果有)。DB2 和 SF 之间实现强制转换功能的方式是否有区别?
0赞 Charles 11/10/2023
Db2 的平台和版本是什么?当存在差异时,涉及的实际日期是什么?

答: 暂无答案