如何处理 Snowflake 中列名中的数字

How to handle numbers in column names in Snowflake

我正在将 SQL 服务器表转换为 snowflake,一些列名称中包含数字,SQL 服务器接受这些数字,但 snowflake 不接受。他们保留相同的名称很重要。有没有人知道如何解决这个语法问题?

--- ms sql server syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
    proc_cd varchar(7) COLLATE Latin1_General_CI_AS NOT NULL,
    PROC_SRV_TYP_CD varchar(3) COLLATE Latin1_General_CI_AS NULL,
    clm_cnt bigint NULL,
    [0_mods_clm_cnt] bigint NULL, --- columns with numbers
    [0_mods_clm_pct] decimal(5,4) NULL,
    [1_mods_clm_cnt] bigint NULL,
    [1_mods_clm_pct] decimal(5,4) NULL,
    [2_mods_clm_cnt] bigint NULL,
    [2_mods_clm_pct] decimal(5,4) NULL,
    [3_mods_clm_cnt] bigint NULL,
    [3_mods_clm_pct] decimal(5,4) NULL,
    [4_mods_clm_cnt] bigint NULL,
    [4_mods_clm_pct] decimal(5,4) NULL,
    mods_var_mode1 varchar(12) COLLATE Latin1_General_CI_AS NULL,
    mods_var_mode1_clm_cnt bigint NULL,
    mods_var_mode2 varchar(12) COLLATE Latin1_General_CI_AS NULL,
    mods_var_mode2_clm_cnt bigint NULL,
    mods_var_mode3 varchar(12) COLLATE Latin1_General_CI_AS NULL,
    mods_var_mode3_clm_cnt bigint NULL,
    mods_var_3_mode_cnt bigint NULL,
    mods_var_3_mode_pct decimal(5,4) NULL,
    any_mods_clm_cnt bigint NULL,
    any_mods_clm_pct decimal(5,4) NULL,
    impact_mods_clm_cnt bigint NULL,
    impact_mods_clm_pct decimal(5,4) NULL,
    CONSTRAINT PK__NPR_PROC__A2159902E557C34D PRIMARY KEY (proc_cd)
);

--- snowflake syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
    proc_cd varchar(7)  NOT NULL,
    PROC_SRV_TYP_CD varchar(3) ,
    clm_cnt bigint,
    0_mods_clm_cnt bigint, --- unaccepted number columns
    0_mods_clm_pct decimal(5,4),
    1_mods_clm_cnt bigint,
    1_mods_clm_pct decimal(5,4),
    2_mods_clm_cnt bigint,
    2_mods_clm_pct decimal(5,4),
    3_mods_clm_cnt bigint,
    3_mods_clm_pct decimal(5,4),
    4_mods_clm_cnt bigint,
    4_mods_clm_pct decimal(5,4),
    mods_var_mode1 varchar(12) ,
    mods_var_mode1_clm_cnt bigint,
    mods_var_mode2 varchar(12) ,
    mods_var_mode2_clm_cnt bigint,
    mods_var_mode3 varchar(12) ,
    mods_var_mode3_clm_cnt bigint,
    mods_var_3_mode_cnt bigint,
    mods_var_3_mode_pct decimal(5,4),
    any_mods_clm_cnt bigint,
    any_mods_clm_pct decimal(5,4),
    impact_mods_clm_cnt bigint,
    impact_mods_clm_pct decimal(5,4)
);

错误信息:

SQL compilation error: syntax error line 5 at position 1 unexpected '0'.

评论说得对。为包含数字的列添加双引号。

简体原文,语法错误:

CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
    clm_cnt bigint,
    0_mods_clm_cnt bigint, --- unaccepted number columns
    0_mods_clm_pct decimal(5,4)

已用引号修复:

CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
    clm_cnt bigint,
    "0_mods_clm_cnt" bigint, --- unaccepted number columns
    "0_mods_clm_pct" decimal(5,4)
)

请注意,现在您在引用这些列时始终需要添加引号并输入小写字母:

select clm_cnt, "0_mods_clm_cnt"
from NPR_PROC_CD_MODS_IMPACT

创建或替换 TABLE NPR_PROC_CD_MODS_IMPACT ( proc_cd varchar(7) 不为空, PROC_SRV_TYP_CD 变量(3) , clm_cnt 大整数, "0_mods_clm_cnt" bigint, --- 不接受的数字列 "0_mods_clm_pct" 十进制(5,4), “1_mods_clm_cnt” bigint, "1_mods_clm_pct" 十进制(5,4), “2_mods_clm_cnt” bigint, "2_mods_clm_pct" 十进制(5,4), “3_mods_clm_cnt” bigint, "3_mods_clm_pct" 十进制(5,4), “4_mods_clm_cnt” bigint, "4_mods_clm_pct" 十进制(5,4), mods_var_mode1 变量(12) , mods_var_mode1_clm_cnt bigint, mods_var_mode2 变量(12), mods_var_mode2_clm_cnt bigint, mods_var_mode3 变量(12) , mods_var_mode3_clm_cnt bigint, mods_var_3_mode_cnt 大整数, mods_var_3_mode_pct 十进制(5,4), any_mods_clm_cnt bigint, any_mods_clm_pct十进制(5,4), impact_mods_clm_cnt bigint, impact_mods_clm_pct 十进制(5,4) );

select 来自 NPR_PROC_CD_MODS_IMPACT

的“0_mods_clm_pct”