我想将确切的查询从Postgresql写入SQL Server

时间:2018-07-31 13:50:13

标签: sql-server postgresql

下面是postgresql中的查询,但是我想在sql server中写。我对postgresql不熟悉,所以我真的不了解它在做什么。

SELECT 
    final.division,
    final.emailaddress,
    CASE
       WHEN btrim(tfinal.completed::text) = ''::text THEN 0
       ELSE 1
    END AS completed,
    final.employeeemail,
    (((date_part('year'::text,final.reporteddate)::text || '-'::text) || date_part('month'::text, final.reporteddate)::text) || '-01'::text)::date AS reporteddate
FROM 
    final;

我猜测btrim在sql中是ltrim或rtrim,如果为null,则o datepart代码为yy-mm-dd格式。如果有误,请纠正我

谢谢!

3 个答案:

答案 0 :(得分:0)

btrim()类似于ltrim()和rtrim()的组合。它从字符串的两端删除了指定的字符。如果未指定任何字符,则默认为空格。参见this post

因此,您发布的示例代码只是修剪空白。时髦的“ ::”是一种类型转换,可确保您得到文本。所以查询的第一部分:

        WHEN btrim(tfinal.completed::text) = ''::text THEN 0
        ELSE 1

只是修剪一个字符串,当它为空时返回0(两个引号内没有任何内容,转换为文本),否则返回1。

您的问题是关于btrim()的,所以我就到此为止,我想您会掌握其余的信息...

答案 1 :(得分:0)

您很幸运,此postgreSQL查询未使用其丰富得多的功能库中的函数。它要先进得多。

   SELECT final.division,
      final.emailaddress,
            CASE
                WHEN trim(tfinal.completed) = '' THEN 0
                ELSE 1
            END AS completed,
        final.employeeemail,
        datefromparts(year(final.reporteddate), month(final.reporteddate), 1) AS reporteddate
       FROM final;

答案 2 :(得分:0)

btrim(variable)在SQL Server中等效于ltrim(rtrim(variable)),同时删除了前导和尾随空格。参见here

您在date_part上是正确的