【问题标题】:SQL Server queries to Snowsql对 Snowsql 的 SQL Server 查询
【发布时间】:2021-10-14 19:31:22
【问题描述】:

我正在尝试将以下 SQL 服务器查询转换为雪花查询。

如何将其转换为 Snowflakesql 格式?我尝试将转换为 int,to_number 但我没有成功。我是新手。

查询1:

SELECT   convert(date, cast(p.yearnumber * 10000 + p.monthnumber * 100 + 1 as varchar(8)), 112) AS Month
FROM tablea m 
INNER JOIN tableb p 
  ON p.period >= m.MinimumPeriod 
  AND p.period <= m.MaximumPeriod 

查询2:

SELECT  CONVERT(INT,YEAR(DATEADD(MONTH,a.Offset,pid+'-01')))*100 +CONVERT(INT,MONTH(DATEADD(MONTH,a.Offset,pid+'-01'))) AS per_id

【问题讨论】:

  • 运行这些程序时遇到什么错误?
  • 我确定查询不会运行,因为它们是 SQL Server 特定的语法,但是您在 Snowflake 中尝试过什么? Snowflake 的文档非常好,因此查找日期格式的完成方式可能会有所帮助。

标签: snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

如何将其转换为 Snowflakesql 格式?

我不会尝试在平台之间 1:1 转换代码,而是首先尝试确定它实际上在做什么。

SELECT convert(date, cast(p.yearnumber * 10000 + p.monthnumber * 100 + 1 as varchar(8)), 112

从零开始:

SELECT  cast(p.yearnumber * 10000 + p.monthnumber * 100 + 1 as varchar(8))
FROM (SELECT 2021 AS yearnumber, 10 AS monthnumber) p
-- 20211001


SELECT convert(date, cast(p.yearnumber * 10000 + p.monthnumber * 100 + 1 as varchar(8)), 112)
FROM (SELECT 2021 AS yearnumber, 10 AS monthnumber) p
--2021-10-01

如我们所见,我们正在构建基于年、月的日期。在 SQL Server 中我们可以使用:

SELECT DATEFROMPARTS(2021,10,1)
FROM (SELECT 2021 AS yearnumber, 10 AS monthnumber) p

db<>fiddle demo


而且 Snowflake 支持DATEFROMPARTS 与 SQL Server 完全一样。

SELECT DATEFROMPARTS(p.yearnumber, p.monthnumber, 1) AS Month
FROM tablea m 
INNER JOIN tableb p 
  ON p.period >= m.MinimumPeriod 
  AND p.period <= m.MaximumPeriod;

我将第二个查询留作练习。

【讨论】:

  • 得到了雪花的查询:select cast(extract(year from DATEADD(month,a.offset,pid)) as int)*100 +cast(extract(month from DATEADD(month,a .offset,pid )) as int) AS Rpid FROM (SELECT -1 AS offset,date('2000-09','YYYY-MM') as pid ) a;;;;;谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多