【问题标题】:What is the difference between single quotes and double quotes in PostgreSQL?PostgreSQL 中的单引号和双引号有什么区别?
【发布时间】:2017-05-14 18:03:22
【问题描述】:

我是 PostgresSQL 的新手。我试过了

select * from employee where employee_name="elina";

但结果错误如下:

ERROR: column "elina" does not exist.

然后我尝试用单引号替换双引号,如下所示:

select * from employee where employee_name='elina';

结果很好..那么postgresql中的单引号和双引号有什么区别。如果我们不能在postgres查询中使用双引号,那么在postgreSQL中这个双引号是否还有其他用途?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

the PostgreSQL manual中所述:

SQL 中的字符串常量是由单引号 (') 包围的任意字符序列,例如 'This is a string'。要在字符串常量中包含单引号字符,请写入两个相邻的单引号,例如 'Dianne''s horse'。请注意,这与双引号字符 (") 不同。

其他地方on the same page

还有第二种标识符:分隔标识符带引号的标识符。它是通过用双引号 (") 将任意字符序列括起来形成的。分隔标识符始终是标识符,而不是关键字。因此"select" 可用于引用名为“select”的列或表,而未引用的select 将被视为关键字,因此在需要表或列名的地方使用时会引发解析错误。

TL;DR:字符串常量的单引号,表/列名的双引号。

【讨论】:

  • 带引号的标识符的另一种用法是用于角色名称:如果您希望用户在用户名中包含.,则双引号是使其合法的语法。
【解决方案2】:

双引号用于表或字段的名称。有时您可以省略它们。单引号用于字符串常量。这是 SQL 标准。在详细表单中,您的查询如下所示:

select * from "employee" where "employee_name"='elina';

【讨论】:

    【解决方案3】:

    单引号用于字符串文字,双引号用于转义数据库对象,如表名/列名等。

    具体来说,如果列/表名称类似于任何保留词/关键字,则使用双引号对它进行转义。尽管每个 RDBMS 都有自己的转义方式(例如 MySQL 中的反引号或 SQL Server 中的方括号),但使用双引号是 ANSI 标准。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2010-10-30
      • 2014-05-13
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多