如何比较雪花中的数字字符串

Posted

技术标签:

【中文标题】如何比较雪花中的数字字符串【英文标题】:how to compare numeric string in snowflake 【发布时间】:2021-06-22 11:58:33 【问题描述】:

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

表1:

块 varchar numberstart varchar numberend varchar

表2

数字变量

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

这里有两个问题

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

【问题讨论】:

【参考方案1】:

您可以将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<>fiddle demo

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

【讨论】:

以上是关于如何比较雪花中的数字字符串的主要内容,如果未能解决你的问题,请参考以下文章

雪花 - 检查模式并返回该模式中的子字符串

如何将数组字符串列展平为雪花中的行?

Rust实现雪花算法生成唯一ID方案

根据雪花中的条件选择列

雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id

如何计算雪花中的日期差异?