这个函数如何在SQL中使用extract返回一个布尔值

时间:2017-01-20 16:47:52

标签: sql postgresql

如果我不能为学生插入笔记,我会创建一个返回true的函数。

CREATE OR REPLACE FUNCTION mineur (note REAL, numeutu INT)
RETURNS BOOLEAN AS $$
SELECT $1 IS NULL OR 
SELECT * FROM studiant 
WHERE student.numetu = $2 AND 
      extract(YEAR FROM AGE(birthdate)) > 18;
       $$ LANGUAGE SQL;

我写这个函数但是postgresql但我得到了:

  

错误:SELECT附近的语法错误(关于select * from etudiant)

1 个答案:

答案 0 :(得分:1)

问题是你在OR上使用了第二个选择,但SELECTs不是布尔表达式,这让它有点混乱。

SELECT $1 IS NULL OR 
SELECT * FROM studiant

第一点令人困惑。我假设如果音符为空,则您希望返回TRUE。所以像这样的查询:

CREATE OR REPLACE FUNCTION mineur (note REAL, numeutu INT)
RETURNS BOOLEAN AS 
$$
SELECT 
  ($1 IS NULL) OR 
  EXISTS(SELECT * FROM studiant 
    WHERE studiant.numetu = $2 AND 
          extract(YEAR FROM AGE(birthdate)) > 18)
$$ 
LANGUAGE SQL;

我在这里使用EXISTS来确定是否存在符合条件的行。

这样的影响是:

  • 如果"注意"则返回true一片空白。
  • 如果a的记录存在,则
  • 返回true 出生日期超过18年的记录。
  • 否则返回false。

http://sqlfiddle.com/#!15/a32ee/2

有一个方形小册子