1

我在这里问了类似的问题:hstore value with space。并由用户解决:Clodoaldo Neto。现在我遇到了包含单引号的字符串的下一个案例。

SELECT 'k=>"name", v=>"St. Xavier's Academy"'::hstore;

我通过阅读http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS尝试使用美元引用的字符串常量

SELECT 'k=>"name", v=>$$St. Xavier's Academy$$'::hstore;

但我做错了。

如何使用包含单引号的字符串制作 postgresql hstore?这个查询似乎有更多这样的例外。如何一次解决所有问题?

4

1 回答 1

3

您可以像在字符串文字中转义任何其他单引号一样转义嵌入的单引号:将其加倍。

SELECT 'k=>"name", v=>"St. Xavier''s Academy"'::hstore;
-- ------------------------------^^

或者,您可以用美元引用整个字符串:

SELECT $$k=>"name", v=>"St. Xavier's Academy"$$::hstore;

无论您使用什么接口与 PostgreSQL 对话,都应该处理这些引用和转义问题。如果您使用手动字符串整理来构建 SQL,那么您应该使用驱动程序的引用和占位符方法。


hstore 的内部解析可以理解键周围的双引号:

包含空格、逗号、=s 或 >s 的双引号键和值。

正如您所指出的,美元引用对于 SQL 字符串文字,hstore 的解析器不知道它们的含义。

于 2013-07-30T19:47:27.743 回答