【发布时间】:2019-02-10 10:00:07
【问题描述】:
我在 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(double precision, "unknown", integer, "unknown", double precision) 不存在; java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: Amazon Invalid operation: function concat(double precision, "unknown", integer, "unknown", double precision) 不存在;
我的问题可能出在哪里?
【问题讨论】:
-
通常你不应该在查询中使用
CONCAT,因为这是一个视图级别的问题(并且单独的数据值应该以其原始数据类型返回给客户端)。您是否有理由需要在 SQL 中而不是在您的应用程序中执行CONCAT?我还注意到,在GROUP BY中使用CONCAT并不能提供最佳性能(并且在您的示例中没有必要,因为您已经在 @987654328 中使用了两个基础值(来自TimeWorkedFrom的月份和年份) @无论如何。
标签: sql sql-server amazon-redshift