将CONCAT从SQLServer转换为Redshift

时间:2018-09-05 09:46:29

标签: sql sql-server amazon-redshift

我在MSSQL服务器上有需要转换为Redshift的脚本

这是其中的一部分

  CROSS JOIN (
SELECT        MONTH(be.TimeWorkedFrom) AS MONTH,
                YEAR(be.TimeWorkedFrom) AS YEAR,
                CONCAT(DATEPART(MONTH, be.TimeWorkedFrom),'/',1,'/',DATEPART(YEAR, be.TimeWorkedFrom))AS MonthBilled
FROM            BE2_Billing_Entries be

WHERE           be.TimeWorkedFrom > '1/1/2015'
                AND be.ProviderId = 65277

GROUP BY        MONTH(be.TimeWorkedFrom),
                YEAR(be.TimeWorkedFrom),
                CONCAT(DATEPART(MONTH, be.TimeWorkedFrom),'/',1,'/',DATEPART(YEAR, be.TimeWorkedFrom))
                )t

我这样重写它

  CROSS JOIN (
SELECT          DATE_TRUNC('MONTH',be.timeworkedfrom) AS MONTH,
                DATE_TRUNC('YEAR',be.timeworkedfrom) AS YEAR,
                CONCAT(DATE_PART('MONTH', be.timeworkedfrom),'/',1,'/',DATE_PART('YEAR', be.timeworkedfrom))AS MonthBilled
FROM            billing_entries be

WHERE           be.timeworkedfrom > '1/1/2015'
                AND be.providerid = 65277

GROUP BY        DATE_TRUNC('MONTH',be.timeworkedfrom),
                DATE_TRUNC('MONTH',be.timeworkedfrom),
                CONCAT(DATE_PART('MONTH', be.timeworkedfrom),'/',1,'/',DATE_PART('YEAR', be.timeworkedfrom))
                )t

但是现在我得到了错误

  

[42883] [500310] Amazon无效操作:函数concat(双精度,“未知”,整数,“未知”,双精度)不存在; java.lang.RuntimeException:com.amazon.support.exceptions.ErrorException:Amazon无效操作:函数concat(双精度,“未知”,整数,“未知”,双精度)不存在;

我的问题在哪里?

1 个答案:

答案 0 :(得分:1)

使用|| (串联)运算符-redshift支持此运算符或嵌套 concat-供您参考https://docs.aws.amazon.com/redshift/latest/dg/r_concat_op.html

CROSS JOIN (
SELECT          DATE_TRUNC('MONTH',be.timeworkedfrom) AS MONTH,
                DATE_TRUNC('YEAR',be.timeworkedfrom) AS YEAR,
                DATE_PART('MONTH', be.timeworkedfrom)||'/'||1||'/'||DATE_PART('YEAR', be.timeworkedfrom) AS MonthBilled
FROM            billing_entries be

WHERE           be.timeworkedfrom > '1/1/2015'
                AND be.providerid = 65277

GROUP BY        DATE_TRUNC('MONTH',be.timeworkedfrom),
                DATE_TRUNC('MONTH',be.timeworkedfrom),
                DATE_PART('MONTH', be.timeworkedfrom)||'/'||1||'/'||DATE_PART('YEAR', be.timeworkedfrom)