Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres案例语句错误_Sql_Postgresql_Case - Fatal编程技术网

Sql 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

我正在尝试创建一个基于职位发布状态的Postgres案例陈述。例如:

  • 状态
    “关闭”
    时,我需要
    更新时间戳与
    创建时间戳之间的天数差
  • 状态
    '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