将 DATEDIFF 从 SQL Server 转换为 redshift

Posted

技术标签:

【中文标题】将 DATEDIFF 从 SQL Server 转换为 redshift【英文标题】:Convert DATEDIFF from SQL Server to redshift 【发布时间】:2018-10-01 08:23:16 【问题描述】:

我有需要转换为 redshift 的 SQL Server 脚本。

这是其中的一部分,我有问题

LEFT JOIN       
    (SELECT  
         cog.ClientId, 
         MAX(CASE me.metrickey WHEN 'contacts-employee_active_count_day_org' THEN mu.value ELSE 0 END) AS ActiveEmployees
     FROM    
         public.module_utilization mu
     JOIN    
         (SELECT  
              me.id,
              me.ChannelId + '-' + me.metrickey AS MetricKey
          FROM    
              public.module_metric me) AS me ON me.id = mu.metricid
     LEFT JOIN       
         public.contacts_client_organization cog ON cog.clientorganizationid = mu.organizationid
     WHERE   
         mu.dy >= DATEADD(Day, -30, GETDATE())
         AND me.metrickey IN ('contacts-employee_active_count_day_org')
     GROUP BY
         cog.clientid) metrics ON metrics.ClientId  = be.clientid
WHERE           
    be.organizationid = 65277
    AND be.timeworkedfrom >= DATEADD(MONTH, -6, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))
    AND be.timeworkedfrom < TO_CHAR(DATE_TRUNC('month', GETDATE()), 'MM/DD/YYYY')
    AND be.isdeleted IS NULL
    AND be.isvoid IS NULL

在这一行

AND be.timeworkedfrom >= DATEADD(MONTH, -6, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))

我收到此错误

无效操作:函数pg_catalog.date_diff("unknown", integer, timestamp without time zone)不存在;

据我了解是因为0

我该如何解决这个问题?

【问题讨论】:

您的查询中有多个 SQL Server 依赖项。您是否正在寻找对 Redshift/Postgres 的全面重构? 它在 main 处进行了重构,我只有行有问题,上面提到了@TimBiegeleisen 【参考方案1】:

您突出显示的WHERE 子句逻辑是将timeworkedfrom 与比当月第一天早六个月的日期进行比较。你可以改变这个:

AND be.timeworkedfrom >= DATEADD(MONTH, -6, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))

到这里:

AND be.timeworkedfrom >= date_trunc('month', current_date) - interval '6 month'

【讨论】:

是的,我知道

以上是关于将 DATEDIFF 从 SQL Server 转换为 redshift的主要内容,如果未能解决你的问题,请参考以下文章

[转] SQL日期函数dayadd/datediff/datepart

Sql server时间转时间long

使用 SqlDataAdapter 时获取 SQL Server DATEDIFF 列作为 TimeSpan

SQL Server:获取本月最后一天[转]

SQL Server DATEDIFF() 函数

SQL SERVER DATEDIFF()函数用法