SQL 服务器查询到 Snowsql

SQL Server queries to Snowsql

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

如何将其转换为 Snowflakesql 格式?我尝试使用 cast as 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

How can I convert this to Snowflakesql format?

与其尝试在平台之间翻译代码 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 服务器中我们可以使用:

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

db<>fiddle demo


并且 Snowflake 支持 DATEFROMPARTS 与 SQL 服务器完全相同。

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;

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