下面是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格式。如果有误,请纠正我
谢谢!
答案 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上是正确的