需要创建一个显示当前月末的列名

问题描述 投票:0回答:1

我需要在雪花中创建一个列名称,以便它显示当前的月结束日期。它应该每月动态变化。

预期的表结构。

Tablename:- sample
Column names :- 
1.Name - Varchar field
2.2023-01-31 (Should be Current monthend) - Integer field.

当我下个月进行

select * from sample
时,列名称应如下所示:

姓名 2023-02-29
A1 15876
B3 8976

我尝试过使用标识符进行类似的操作,它在创建表语句中抛出以下错误。

“意外的 '('。位置 0 处的语法错误第 5 行意外 ')'。

Set NEW123=(to_varchar(Current_Date(),'YYYY-MM-DD');

CREATE TABLE SAMPLE
(
IDENTIFIER($NEW123) INTEGER
);
sql database date snowflake-cloud-data-platform create-table
1个回答
0
投票

因此您希望结果的 SQL 相当于:

create table "SAMPLE" (name text, "2023-02-29" number);

表名需要用引号引起来,因为

sample
是保留字。

使用 LAST_DAY 我们可以获得月末:

select current_date() as cd
    ,LAST_DAY(cd, 'month') as end_date;
CD END_DATE
2024-01-12 2024-01-31

所以现在我们只需要构建我们想要的 SQL:

select current_date() as cd
    ,LAST_DAY(cd, 'month') as end_date
    ,'create table "SAMPLE" (name text, "'|| LAST_DAY(cd, 'month')::text ||'" number)' as sql;
CD END_DATE SQL
2024-01-12 2024-01-31 创建表“SAMPLE”(名称文本,“2024-01-31”编号)

可爱,可爱,现在让我们通过 EXECUTE IMMEDIATE

运行它
DECLARE
    sql text;
BEGIN
    sql := 'create table "SAMPLE" (name text, "'|| LAST_DAY(current_date(), 'month')::text ||'" number)';

    EXECUTE IMMEDIATE :sql;
END;
select * from "SAMPLE";

© www.soinside.com 2019 - 2024. All rights reserved.