我需要在雪花中创建一个列名称,以便它显示当前的月结束日期。它应该每月动态变化。
预期的表结构。
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 相当于:
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";