where子句postgresql中的函数(动态列)

时间:2017-08-04 10:33:18

标签: sql postgresql

我创建了func_leonard_test2函数,当

返回 teach_fra = true
SELECT func_leonard_test2('Français-Philosophie');

func_leonard_test2

CREATE OR REPLACE FUNCTION public.func_leonard_test2(
    IN url text,
    OUT translation text)
  RETURNS text AS
$BODY$BEGIN

SELECT CONCAT(translate,'=true') INTO translation FROM seo_content WHERE name=url;     

END;$BODY$

我想在下面的

中的where子句中添加该函数
SELECT description FROM c_users WHERE (SELECT func_leonard_test('Français-Philosophie')) LIMIT 10;

但是我得到了错误 错误:WHERE的参数必须是boolean类型,而不是类型文本

如何使该功能在WHERE子句中起作用?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您的函数返回一个字符串。你需要某种字符串比较。有些像:

WHERE func_leonard_test('Français-Philosophie') IS NOT NULL

WHERE func_leonard_test('Français-Philosophie') = 'ABC'

此外,SELECT不是必需的。

编辑:

我认为你希望函数返回一个布尔值。写它的一种方法是:

CREATE OR REPLACE FUNCTION public.func_leonard_test2 (
    IN in_url text
   )
  RETURNS boolean AS
$BODY$BEGIN
    RETURN (SELECT (c.translate = true)
            FROM seo_content c
            WHERE c.name = in_url
           );     
END;$BODY$

然后你可以使用:

WHERE func_leonard_test('Français-Philosophie')