【问题标题】:CASE WHEN statement in WHERE clause PostgresqlWHERE 子句中的 CASE WHEN 语句 Postgresql
【发布时间】:2023-01-21 01:16:16
【问题描述】:

我一直在努力弄清楚如何在 Postgresql 的 WHERE 中放置一个 CASE 语句。我需要将字符串转换为日期(如第 3 行所示)。这很好用。当我尝试在 WHERE 语句中提取 CURRENT_DATE 时,我遇到了错误。这是最好的方法吗?非常欢迎任何建议。

SELECT 
CASE WHEN
multi_app_documentation.nsma1_code = 'DATE' THEN TO_DATE(multi_app_documentation.nsma1_ans, 'MMDDYYYY') END AS "Procedure Date",
    ' ' AS "Case Confirmation Number",
    ip_visit_1.ipv1_firstname AS "Patient First", 
    ip_visit_1.ipv1_lastname AS "Patient Last", 
    visit.visit_sex AS "Patient Gender", 
    TO_CHAR(visit.visit_date_of_birth, 'MM/DD/YYYY') AS "DOB", 
    visit.visit_id AS "Account Number", 
    visit.visit_mr_num AS "MRN",
    ' ' AS "Module",
    ' ' AS "Signed off DT", 
    CASE WHEN
    multi_app_documentation.nsma1_code = 'CRNA' THEN multi_app_documentation.nsma1_ans END AS "Primary CRNA",
    ' ' AS "Secondary CRNA",
    ' ' AS "Primary Anesthesiologist",
' ' AS "Secondary Anesthesiologist",
' ' AS "Canceled Yes/No" 
FROM
    multi_app_documentation
    INNER JOIN ip_visit_1 ON multi_app_documentation.nsma1_patnum = ip_visit_1.ipv1_num
    INNER JOIN visit ON ip_visit_1.ipv1_num = visit.visit_id 
WHERE
CASE
        
        WHEN ( multi_app_documentation.nsma1_code = 'DATE' AND TO_DATE( multi_app_documentation.nsma1_ans, 'MMDDYYYY' ) = CURRENT_DATE END ) 
        AND multi_app_documentation.nsma1_ans IS NOT NULL 
ORDER BY
    ip_visit_1.ipv1_lastname ASC

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    你的括号不平衡。此外,您甚至不需要在 WHERE 子句中使用 CASE 表达式。使用这个版本:

    WHERE
        multi_app_documentation.nsma1_code = 'DATE' AND
        TO_DATE(multi_app_documentation.nsma1_ans, 'MMDDYYYY') = CURRENT_DATE
    

    此外,不希望将文本日期存储在nsma1_ans 列中。最好使用真正的日期列。如果你必须将日期存储为文本,然后至少使用格式 YYYY-MM-DD,然后可以简单地使用 nsma1_ans::date 转换为日期。

    【讨论】:

    • 我对 Postgresql 和学习还很陌生。我感谢您的帮助!这行得通。
    • 蒂姆,我遇到的问题是日期并不总是输入为 01202023。有时它们被误输入(尽管被告知不要重复输入)为 01/20/23,然后我的查询根本不会运行。
    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2017-04-10
    • 2020-03-26
    相关资源
    最近更新 更多