在函数内使用字符串执行查询

Executing a query with string inside a function

我必须在函数内执行以下查询:

SELECT year FROM tbl_people WHERE personal_card = 'A5B123';

它returns一个整数。

问题是,我必须执行以下操作:

EXECUTE 'SELECT year FROM tbl_people WHERE personal_card = 'A5B123'';

但它将查询截断为:

SELECT year FROM tbl_people WHERE personal_card

我试过了:

EXECUTE "SELECT year FROM tbl_people WHERE personal_card = 'A5B123'";

但也失败了。

如何实现?

SQL 中的单引号 are escaped by doubling them:

EXECUTE 'SELECT year FROM tbl_people WHERE personal_card = ''A5B123''';

但是在 Postgres 中做这种事情更方便的方法是使用 dollar quoted strings:

EXECUTE $$SELECT year FROM tbl_people WHERE personal_card = 'A5B123'$$;

您可以像这样使用 quote_literal 函数:

EXECUTE 'SELECT year FROM tbl_people WHERE personal_card = ' || quote_literal('A5B123');