Can someone help me resolve an sql syntax error on pgadmin while creating a function?

huangapple go评论104阅读模式
英文:

Can someone help me resolve an sql syntax error on pgadmin while creating a function?

问题

  1. 第一次尝试 -
  2. ```sql
  3. CREATE FUNCTION rental_quarter (rental_date TIMESTAMP)
  4. RETURNS VARCHAR(7)
  5. BEGIN
  6. IF MONTH(rental_date) BETWEEN 1 AND 3 THEN RETURN YEAR(rental_date)+ "Q1";
  7. ELSE IF MONTH(rental_date) BETWEEN 4 AND 6 THEN RETURN YEAR(rental_date)+ "Q2" ;
  8. ELSE IF MONTH(rental_date) BETWEEN 7 AND 9 THEN RETURN YEAR(rental_date)+ "Q3";
  9. ELSE IF MONTH(rental_date) BETWEEN 10 AND 12 THEN RETURN YEAR(rental_date)+ "Q4";
  10. ELSE RETURN NULL ;
  11. END IF;
  12. END;

最新尝试 代码和错误

编辑 建议修复错误 #1

我对SQL很陌生,已经在这上面卡了几个小时了。我正在尝试创建一个rental_quarter(rental_date)函数,将时间戳日期格式(没有时区)转换为年份+季度。我完全不知道我做错了什么。我尝试过使用AS、DECLARE、SET AS。我已经尝试了各种分号的变化。它必须是一个用户定义的函数,以满足项目要求。请帮忙。

  1. <details>
  2. <summary>英文:</summary>
  3. First Attempt -

CREATE FUNCTION rental_quarter (rental_date TIMESTAMP)
RETURNS VARCHAR(7)
BEGIN
IF MONTH(rental_date) BETWEEN 1 AND 3 THEN RETURN YEAR(rental_date)+ ”Q1”;
ELSE IF MONTH(rental_date) BETWEEN 4 AND 6 THEN RETURN YEAR(rental_date)+ ”Q2” ;
ELSE IF MONTH(rental_date) BETWEEN 7 AND 9 THEN RETURN YEAR(rental_date)+ ”Q3”;
ELSE IF MONTH(rental_date) BETWEEN 10 AND 12 THEN RETURN YEAR(rental_date)+ ”Q4”;
ELSE RETURN NULL ;
END IF;
END;

  1. Latest try [Code and Error](https://i.stack.imgur.com/Bw3xX.png)
  2. [EDIT Suggested fix error #1][1]
  3. I am new to sql and have been stuck on this a few hours . I am trying to create a rental_quarter(rental_date) function that turns the time stamped date format (without timezone) into year + quarter. I have no Idea what I am doing wrong. I have tried using AS, DECLARE, SET AS. I&#39;ve done every variation of semicolons. It has to be a user defined function to meet project requirements. Please help.
  4. [1]: https://i.stack.imgur.com/AdodW.png
  5. </details>
  6. # 答案1
  7. **得分**: 0
  8. 已经有一个用于此目的的函数,to_char(),您不必自己编写一个:
  9. SELECT to_char('2023-08-01'::timestamp, 'YYYY"Q"Q');
  10. 结果:2023Q3
  11. <details>
  12. <summary>英文:</summary>
  13. There is already a function for this, to_char(), you don&#39;t have write one yourself:
  14. SELECT to_char(&#39;2023-08-01&#39;::timestamp, &#39;YYYY&quot;Q&quot;Q&#39;);
  15. Result: 2023Q3
  16. </details>
  17. # 答案2
  18. **得分**: -1
  19. 这是我认为需要最少更改的版本:
  20. ```sql
  21. CREATE FUNCTION rental_quarter (rental_date TIMESTAMP)
  22. RETURNS VARCHAR(7) AS
  23. $BODY$
  24. BEGIN
  25. IF MONTH(rental_date) BETWEEN 1 AND 3 THEN RETURN YEAR(rental_date) || 'Q1';
  26. ELSIF MONTH(rental_date) BETWEEN 4 AND 6 THEN RETURN YEAR(rental_date) || 'Q2';
  27. ELSIF MONTH(rental_date) BETWEEN 7 AND 9 THEN RETURN YEAR(rental_date) || 'Q3';
  28. ELSIF MONTH(rental_date) BETWEEN 10 AND 12 THEN RETURN YEAR(rental_date) || 'Q4';
  29. ELSE RETURN NULL ;
  30. END IF;
  31. END;
  32. $BODY$
  33. LANGUAGE PLPGSQL;
英文:

This is with minimum changes I think:

  1. CREATE FUNCTION rental_quarter (rental_date TIMESTAMP)
  2. RETURNS VARCHAR(7) AS
  3. $BODY$
  4. BEGIN
  5. IF MONTH(rental_date) BETWEEN 1 AND 3 THEN RETURN YEAR(rental_date)+ Q1”;
  6. ELSIF MONTH(rental_date) BETWEEN 4 AND 6 THEN RETURN YEAR(rental_date)+ Q2”;
  7. ELSIF MONTH(rental_date) BETWEEN 7 AND 9 THEN RETURN YEAR(rental_date)+ Q3”;
  8. ELSIF MONTH(rental_date) BETWEEN 10 AND 12 THEN RETURN YEAR(rental_date)+ Q4”;
  9. ELSE RETURN NULL ;
  10. END IF;
  11. END;
  12. $BODY$
  13. LANGUAGE PLPGSQL;

huangapple
  • 本文由 发表于 2023年7月3日 04:10:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/76600595.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定