【问题标题】:Question on usage of single and double quotes in SQLSQL中单引号和双引号的使用问题
【发布时间】:2020-01-10 14:56:19
【问题描述】:

我正在学习 SQL,并且想知道如何在字段名称中使用单引号和双引号。

SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank <= 10
   AND "group" LIKE '%Ludacris%'  

为什么删除 group 上的双引号不起作用,但它接受带有或不带有引号的 year

【问题讨论】:

  • 哪个数据库?我知道 PostgreSQL 以不同的方式对待带引号和不带引号的标识符,例如:不带引号的映射到小写,而带引号的保留大小写并且区分大小写。 (如果您在创建表时声明了一个带引号的列,那么您必须继续为其使用引号。)但是这看起来不是您的问题。
  • 我正在通过一个名为 MODE 的网站学习 SQL。不知道它在哪种 SQL 上运行...
  • group 是保留字,因此如果用作标识符,则必须用引号引起来。 year_Whatever 不是,因为year 是更大标识符的一部分,所以碰巧有一个名为year 的保留字并不重要。
  • @Rup:这几乎是 SQL 标准所定义的,只是 SQL 标准要求将不带引号的标识符折叠为小写
  • @a_horse_with_no_name 哦,好的,谢谢。我只在使用其他人的 PostgreSQL 代码时遇到过这种情况。

标签: sql quoted-identifier


【解决方案1】:

group 是保留键,因此不能用作常规标识符。

包含非法字符(例如空格)或保留关键字的标识符必须用双引号引起来。例如参见Postgres manual中的解释

在 SQL 标准中,它们被称为“分隔标识符”,但术语“带引号的标识符”也很常见。

单引号仅用于 SQL 中的字符串值(尽管某些 DBMS 产品也允许对字符串使用双引号,对标识符使用单引号,这是非标准 SQL)

请注意,根据 SQL 标准,带引号的标识符区分大小写,因此 "Group""GROUP" 是两个不同的名称(同样,一些 DBMS 产品也忽略了这一点)。 p>

【讨论】:

  • 好像是这样。这是否意味着我可以对需要访问的所有字段使用双引号。在这种情况下,我会使用“年份”和所有其他字段作为标准做法
  • 理论上可以,但我强烈建议从不在 SQL 中使用双引号。从长远来看,这将使您的生活更轻松。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2012-10-14
  • 2013-03-24
  • 2023-03-25
相关资源
最近更新 更多