首页 > 解决方案 > 如何比较雪花中的数字字符串

问题描述

在雪花中,数字数据类型支持 38 位长度。为了存储超过 38 位的值,我使用了 varchar 数据类型。我有两组桌子,

表格1:

表2

我想查看 table1 中的块详细信息,其中 table2.number 存在于 table1.numberstart 和 table2.numberend 之间

这里我有两个问题

  1. 字符串比较给出错误的输出。
  2. 我无法使用 cast 或 to_number 函数将其转换为数字,因为字符串值超过 38 位。

标签: stringsnowflake-cloud-data-platform

解决方案


您可以将LPAD值设置为通用大小,然后执行字符串比较

SELECT*
FROM table2 t2
JOIN table1 t1
  ON LPAD(t2.number, 50, '0') BETWEEN LPAD(t1.numberstart, 50, '0') 
                                  AND LPAD(t1.numberend,   50, '0');

db<>小提琴演示

这是简化的情况,如果涉及负数或分数,它将不起作用。


推荐阅读