quote_nullable()

一个将任意输入格式化为 SQL 字符串字面量并转换 NULL 为字符串的函数

quote_nullable() 是一个系统函数,它将任意输入格式化为适当的带引号和转义的 SQL 字符串字面量。如果输入为 NULL,则返回字符串 'NULL'

quote_nullable()PostgreSQL 8.4 中添加。

用法

quote_nullable ( text ) → text
quote_nullable ( anyelement ) → text

quote_nullable() 返回的字符串适合用作 SQL 字符串中的字符串字面量。与 quote_literal() 相比,它不会返回 NULL 值(而是返回字符串 'NULL');这使得它适用于那些实际 NULL 值将使整个字符串无效的情况。有关更多详细信息,请参阅 示例 部分。

变更历史

示例

quote_nullable() 的基本用法示例

postgres=# SELECT quote_nullable('foo \''bar');
 quote_nullable 
----------------
 E'foo \\''bar'
(1 row)

非字符串数据类型将转换为 text

postgres=# SELECT quote_literal(42.195);
 quote_literal 
---------------
 '42.195'
(1 row)

如果提供的值为 NULL,则返回字符串 'NULL'

postgres=# SELECT quote_nullable(NULL), quote_nullable(NULL) IS NULL;
 quote_nullable | ?column? 
----------------+----------
 NULL           | f
(1 row)

如果在 PL/pgSQL 中生成动态查询,并且任何被引用的值可能包含 NULL,则 quote_literal() 将导致类似于以下内容的错误

postgres=# DO
           $$
           BEGIN
             EXECUTE
               ' UPDATE foo SET val = ' || quote_literal(NULL) ||
               '  WHERE id = ' || quote_literal(NULL);
           END;
           $$;
ERROR:  query string argument of EXECUTE is null
CONTEXT:  PL/pgSQL function inline_code_block line 3 at EXECUTE

因为将 NULL 值连接到字符串类型将导致 NULL 值,例如:

postgres=# SELECT 'foo ' || NULL || ' bar' IS NULL;
 ?column? 
----------
 t
(1 row)

quote_nullable() 可以防止此问题

postgres=# DO
           $$
           BEGIN
             EXECUTE
               ' UPDATE foo SET val = ' || quote_nullable(NULL) ||
               '  WHERE id = ' || quote_nullable(NULL);
           END;
           $$;
DO

分类

字符串操作系统函数

另请参阅

quote_literal()quote_ident()

反馈

提交任何关于 "quote_nullable()" 的评论、建议或更正 此处