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()”的任何评论、建议或更正 在此处