You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Snowflake实现ColumnB标准化及区间数字列表生成需求

解决方案:Snowflake SQL实现ColumnB标准化与连续数字列表生成

需求分析

首先明确ColumnBupdated的生成规则:

  • 保持ColumnB的末尾数字序列不变,生成大于等于ColumnA的最小整数
  • 最终生成从ColumnA到ColumnBupdated的连续数字数组

完整SQL代码实现

WITH original_data AS (
    SELECT 20 AS ColumnA, 34 AS ColumnB UNION ALL
    SELECT 113 AS ColumnA, 17 AS ColumnB UNION ALL
    SELECT 308 AS ColumnA, 12 AS ColumnB
),
calculated_metrics AS (
    SELECT 
        ColumnA,
        ColumnB,
        -- 获取ColumnB的数字位数
        LEN(TO_VARCHAR(ColumnB)) AS b_digit_length,
        -- 计算10的位数次方,用于截取末尾对应位数
        POWER(10, LEN(TO_VARCHAR(ColumnB))) AS divisor,
        -- 获取ColumnA末尾对应位数的数值
        MOD(ColumnA, POWER(10, LEN(TO_VARCHAR(ColumnB)))) AS a_trailing_digits
    FROM original_data
),
updated_data AS (
    SELECT 
        ColumnA,
        ColumnB,
        -- 计算标准化后的ColumnBupdated
        CASE 
            WHEN ColumnB > a_trailing_digits THEN ColumnA - a_trailing_digits + ColumnB
            ELSE ColumnA - a_trailing_digits + ColumnB + divisor
        END AS ColumnBupdated
    FROM calculated_metrics
)
-- 生成连续数字列表
SELECT 
    ColumnA,
    ColumnB,
    ColumnBupdated,
    -- 使用左闭右开区间生成连续数组,结束值+1确保包含ColumnBupdated
    ARRAY_CONSTRUCT_RANGE(ColumnA, ColumnBupdated + 1) AS numberlist
FROM updated_data;

代码逻辑说明

  1. original_data:模拟用户提供的原始数据集
  2. calculated_metrics:计算关键中间值
    • b_digit_length:获取ColumnB的数字位数(如17是2位)
    • divisor:生成10的位数次方(如2位对应100),用于截取数字末尾部分
    • a_trailing_digits:获取ColumnA末尾与ColumnB位数相同的数值(如113的末尾2位是13)
  3. updated_data:生成标准化后的ColumnBupdated
    • 如果ColumnB大于ColumnA的末尾对应位数数值,直接替换得到结果
    • 否则,替换后再加divisor(进一位),确保结果大于等于ColumnA
  4. 最终查询:使用ARRAY_CONSTRUCT_RANGE函数生成连续数字数组,该函数为左闭右开区间,因此结束值需设置为ColumnBupdated + 1

验证结果

运行上述代码后,将得到与需求完全匹配的结果:

ColumnAColumnBColumnBupdatednumberlist
203434[20,21,...,34]
11317117[113,114,...,117]
30812312[308,309,...,312]

内容的提问来源于stack exchange,提问作者BMX_01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:35:23