【问题标题】:How to make a function use CASE and IFNULL in postgreSQL?如何使函数在 postgreSQL 中使用 CASE 和 IFNULL?
【发布时间】:2015-09-25 19:06:13
【问题描述】:

你能告诉我如何在 postgre 中使用 CASE 和 IFNULL 吗?我正在从 sql 迁移到 postgreSQL,我想用这种语法创建一个函数:

SELECT a.furniture_id, a.furniture_brand, a.furniture_cost, 
CASE 
  WHEN furniture_id = f_id THEN a.furniture_content 
  ELSE '' 
END CONTENT 
   FROM tb_furniture a
   WHERE 
    (IFNULL(a.sale_id,0) = IFNULL(f_id,0) OR (a.furniture_id = f_Id AND IFNULL(a.furniture_content,'') > '')) 
    AND a.published = 1;

感谢之前(y)

【问题讨论】:

  • 呃,PostgreSQL 是 SQL。您的意思是“我正在从 Microsoft SQL Server 迁移到 PostgreSQL”吗?

标签: postgresql function stored-procedures case ifnull


【解决方案1】:

这似乎是您所追求的,但请仔细检查WHERE 条件:

SELECT a.furniture_id, a.furniture_brand, a.furniture_cost, 
       CASE WHEN a.furniture_id = f_id
       THEN a.furniture_content 
       ELSE '' 
       END AS content
FROM tb_furniture a
WHERE (coalesce(a.sale_id,0) = coalesce(f_id,0) OR length(content) > 0)
  AND a.published = 1;

【讨论】:

  • 我认为 PostgreSQL 中没有IFNULL,您应该使用标准的COALESCE 或跳过转换并转到IS DISTINCT FROM or IS NOT DISTINCT FROM
  • 是的。明显的错误。已更正。
  • @AnitaWulandari 由于f_id 是一个参数并且在CASE 语句和WHERE 条件中都使用,因此可以简化后者。查看更新的答案。
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多