Sql Postgres案例语句错误
我正在尝试创建一个基于职位发布状态的Postgres案例陈述。例如:Sql Postgres案例语句错误,sql,postgresql,case,Sql,Postgresql,Case,我正在尝试创建一个基于职位发布状态的Postgres案例陈述。例如: 当状态为“关闭”时,我需要更新时间戳与创建时间戳之间的天数差 当状态为'Open'或'Pending'时,我想从当前时间戳中减去在时间戳处创建的 到目前为止,我创建的查询如下所示: Select users.first_name || " " || users.last_name, users.email, organizations.name, organizations.vertical, jobs.name, job
- 当
为状态
时,我需要“关闭”
更新时间戳与
创建时间戳之间的天数差
- 当
为状态
或'Open'
时,我想从当前时间戳中减去在'Pending'
时间戳处创建的
Select users.first_name || " " || users.last_name,
users.email,
organizations.name,
organizations.vertical,
jobs.name,
jobs.id
(Case
When jobs.status = 'Closed' Then jobs.updated_at - jobs.created_at Else 'Not Closed') END AS days_to_hire,
(Case
When jobs.status IN ('Open,'Pending') Then current_timestamp - jobs.created_at Else 'Closed_or_Deleted') END AS days_open,
FROM organizations
JOIN users on organizations.id = users.organization_id
JOIN jobs on user.id= jobs.user.id
但它并不像我预期的那样起作用:
错误:语法错误位于或接近“)”
我还不知道为什么
任何帮助都将不胜感激。简短回答
查询中有三个语法问题:
案例
语句中的右括号放错了位置CASE
语句中的未终止字符串文字Select users.first_name || " " || users.last_name,
users.email,
organizations.name,
organizations.vertical,
jobs.name,
-- Missing comma added below.
jobs.id,
--jobs.id
-- Closing paren moved to after `END` below.
(Case
When jobs.status = 'Closed' Then jobs.updated_at - jobs.created_at Else 'Not Closed' END) AS days_to_hire,
--(Case
--When jobs.status = 'Closed' Then jobs.updated_at - jobs.created_at Else 'Not Closed') END AS days_to_hire,
-- Closing paren moved to after `END` and a closing single quote added
-- to terminate the string literal 'Open' below.
(Case
When jobs.status IN ('Open','Pending') Then current_timestamp - jobs.created_at Else 'Closed_or_Deleted' END) AS days_open,
--(Case
--When jobs.status IN ('Open,'Pending') Then current_timestamp - jobs.created_at Else 'Closed_or_Deleted') END AS days_open,
FROM organizations
JOIN users on organizations.id = users.organization_id
JOIN jobs on user.id= jobs.user.id
补遗
此外,您的查询很难以格式化的方式读取。这使得调试变得更加困难
考虑另一种利用缩进和一致的关键字大小写(即小写与大写)的方法:
更容易阅读和调试,我想你会同意的
就个人而言,我不喜欢
CASE
语句周围的括号,但与良好、一致地使用缩进和关键字大小写相比,这是一个次要的选择。欢迎使用!请务必指出您得到的确切语法错误。我包括了在测试您的查询时看到的第一个错误,但为了清楚起见,您应该在问题中包含特定的错误消息。@13ISPaulGeorge:如果这令人满意地回答了您的问题,请将其标记为已接受。谢谢
SELECT
users.first_name || " " || users.last_name,
users.email,
organizations.name,
organizations.vertical,
jobs.name,
jobs.id,
(CASE
WHEN jobs.status = 'Closed' THEN jobs.updated_at - jobs.created_at
ELSE 'Not Closed'
END) AS days_to_hire,
(CASE
WHEN jobs.status IN ('Open', 'Pending') THEN CURRENT_TIMESTAMP - jobs.created_at
ELSE 'Closed_or_Deleted'
END) AS days_open,
FROM organizations
JOIN users ON organizations.id = users.organization_id
JOIN jobs ON user.id= jobs.user.id