0

我在 postgresql 9.1 版中有一个带有两个撇号的行单元格值,如下所示:

col1  col2
''    1
''    2
aa    3
aa    4

现在我想从 col1 中选择那些带有 '' 的行

我试过了:

select * from table1 where col1 like '''''%'

但什么也不返回。

select * from table1 where col1 = ''''''

但什么也不返回。

select * from table1 where col1 = $$''''$$

但也一无所获。

select * from table1 where col1 like $$''%$$

但也一无所获。

有人可以帮忙吗?谢谢

4

1 回答 1

3

您还没有解释为什么您的第二次尝试是正确的,但对您不起作用。

为了完整起见,以下是解决您所写问题的正确方法-我怀疑这可能与您实际遇到的问题不同。

  • 如果standard_conforming_strings打开(较新的 PostgreSQL 版本):

    SELECT * FROM table1 WHERE col1 = '''''';
    

    那里有六个单引号。两个是字符串文字的常用引号。其他四个是一对双引号,因为您想找到两个单引号的字符串,并且引号通过双引号进行转义。

  • 对于所有模糊的现代 PostgreSQL 版本和设置,但非标准:

    SELECT * FROM table1 WHERE col1 = E'\'\''
    

    这使用了转义字符串语法,这对于熟悉 C 风格字符串的人来说更易读。

  • PostgreSQL 特定的美元报价:

    SELECT * FROM table1 WHERE col1 = $$''$$;
    

    这使用$$引用样式,这是一个 PostgreSQL 扩展。加上$$引号,'不再有什么特别之处,所以你只需写两个普通''字符。当然,您刚刚将问题移至$$,这就是您可以编写的原因:

    SELECT * FROM table1 WHERE col1 = $uniquedelimiter$''$uniquedelimiter$;
    

    whereuniquedelimiter可以是任何有效的标识符字符串。

于 2013-06-16T23:37:19.117 回答