SQL 中的单引号和双引号有什么区别?

What is the difference between single and double quotes in SQL?

提问人:Vineet 提问时间:1/3/2010 最后编辑:OMG PoniesVineet 更新时间:11/4/2021 访问量:262892

问:

SQL中的单引号和双引号有什么区别?

SQL 数据库 报价

评论

1赞 MSIS 3/1/2022
Sql的类型/供应商是什么?

答:

209赞 OMG Ponies 1/3/2010 #1

单引号用于指示 SQL 中字符串的开头和结尾。双引号通常不用于 SQL,但这可能因数据库而异。

坚持使用单引号。

无论如何,这是主要用途。您可以对列别名使用单引号,您希望在应用程序代码中引用的列名与数据库中实际调用的列名不同。例如:将更具可读性,因此您可以使用以下任一方法:PRODUCT.idproduct_id

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

两者都适用于 Oracle、SQL Server、MySQL......但我知道有些人说,TOAD IDE在使用单引号方法时似乎会给人一些悲伤。

当列别名包含空格字符时,必须使用单引号,例如 ,但不建议列别名包含多个单词。product id

评论

45赞 LukLed 1/3/2010
双引号通常用于对象名称(例如列名“名字”)。这是 SQL-92 标准的一部分。
24赞 LukLed 1/3/2010
不。我的意思是列名,但它也涉及别名。由于 SQL-92 标准,我建议对具有不寻常字符的别名和名称使用双引号。 在 SQL Server 中不起作用,但可以。SELECT * FROM USERS 'Users'SELECT * FROM USERS "Users"
175赞 Spacedman 1/4/2012
我总是弄错这一点,直到我意识到一个简单的规则:[S]trings 的 [S]ingle quote,[D]atabase 中事物的 [D]ouble quote
4赞 Erwin Brandstetter 4/29/2012
应使用双引号作为标识符。单引号与标准背道而驰。
8赞 10/31/2014
SELECT PRODUCT.id 'product_id'在 Oracle 不起作用。单引号仅适用于字符文本。它们不能用于(标准)SQL 中的标识符(尽管某些 DBMS 在涉及引号标识符时会忽略 SQL 标准)
46赞 MarkR 1/3/2010 #2

在 ANSI SQL 中,双引号引用对象名称(例如表),这允许它们包含其他不允许的字符,或者与保留字相同(真的避免这种情况)。

单引号用于字符串。

但是,MySQL忽略了该标准(除非其SQL_MODE被更改),并允许它们互换用于字符串。

此外,Sybase和Microsoft也使用方括号进行标识符引用。

所以它有点特定于供应商。

其他数据库,如 Postgres 和 IBM 实际上遵循 ansi 标准:)

评论

4赞 dar7yl 2/24/2010
MySql 使用反引号 ' 进行标识符引用。(仅供完成)
1赞 fny 8/5/2014
示例:如果要将 Postgres 列命名为“date”(保留),则需要将其双引号括起来。
75赞 Bill Karwin 1/3/2010 #3

单引号分隔字符串常量或日期/时间常量。

双引号分隔标识符,例如表名或列名。通常,仅当您的标识符不符合简单标识符的规则时,才需要这样做。

另请参阅:

您可以按照ANSI标准使MySQL使用双引号:

SET GLOBAL SQL_MODE=ANSI_QUOTES

您可以使 Microsoft SQL Server 按照 ANSI 标准使用双引号:

SET QUOTED_IDENTIFIER ON
181赞 NaN 10/26/2012 #4

一个简单的规则,让我们记住在哪种情况下使用什么:

  • [S]ingle 引号用于 [S]trings Literals(日期文字也是字符串);
  • [D]ouble 引号用于 [D]atabase 标识符;

例子:

INSERT INTO "USERS" ("LOGIN", "PASSWORD", "DT_BIRTH") VALUES ('EDUARDO', '12345678', '1980-09-06');

在 MySQL 和 MariaDB 中,'(反引号)符号与 符号相同。请注意,当您的 SQL_MODE 已启用时,您不能将 用于文字字符串。ANSI_QUOTES

评论

7赞 Sam 10/26/2016
澄清一下,无论是否启用ANSI_QUOTES,反引号 (') 都可用于分隔标识符,但如果启用了 ANSI_QUOTES,则“您不能使用双引号来引用文本字符串,因为它被解释为标识符。(来源)。(请注意,这一切都假设您正在谈论 MySQL。
3赞 Bill Karwin 2/28/2019
但 [S]ingle 引号也适用于 [D]ate 字面意思。:-/
12赞 guettli 3/1/2017 #5

我使用这个助记符:

  • 单引号用于字符串(一件事)
  • 双引号用于表名和列名(两件事)

根据规格,这不是 100% 正确的,但这个助记符可以帮助我(人类)。

评论

4赞 m4heshd 7/31/2021
human being与其他使用 SQL 的动物相反。:D
0赞 Eric Garcia 12/16/2021
用作表假名的标识符应使用哪些引号?(例如,在联接查询中,我们编写了 ....从“table_name”作为 t1 JOIN ......)t1 应该包含在什么中?
0赞 MSIS 3/1/2022
每个字符串都需要引号吗?
1赞 Ayushh Srivastava 1/7/2019 #6

区别在于它们的用法。单引号主要用于引用 WHERE、HAVING 以及一些内置 SQL 函数(如 CONCAT、STRPOS、POSITION 等)中的字符串。

如果要使用中间有空格的别名,则可以使用双引号来引用该别名。

例如

(select account_id,count(*) "count of" from orders group by 1)sub 

这是一个订单表中的子查询,其中account_id作为外键,我正在聚合该子查询,以了解每个帐户下了多少订单。在这里,为了目的,我给一列起了任何随机名称作为“count of”。

现在,让我们编写一个外部查询来显示“count of”大于 20 的行。

select "count of" from 
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;

您也可以将相同的大小写应用于公用表表达式。

3赞 majidshakeelshawl 10/18/2021 #7

要记住的两件事:

Single Qutoes(') : 字符串文本

select * from employees where room_name = 'RobinCapRed';

其中 RobinCapRed 是字符串文本

double quotes(“) : 名或表名

select "first_name" from "employees";

其中 first_Name 是 employees 表中的列名