ChatGPT解决这个技术问题 Extra ChatGPT

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

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

什么类型/供应商的 Sql?

c
cmaher

单引号用于表示 SQL 中字符串的开始和结束。在 SQL 中通常不使用双引号,但这可能因数据库而异。

坚持使用单引号。

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

选择 PRODUCT.id 作为 product_id

选择 PRODUCT.id 'product_id'

在 Oracle、SQL Server、MySQL 中都可以工作……但我知道有些人说 TOAD IDE 似乎在使用单引号方法时会让人有些痛苦。

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


双引号通常用于对象名称(例如列名“First name”)。这是 SQL-92 标准的一部分。
不,我的意思是列名,但它也涉及别名。由于 SQL-92 标准,我建议对具有不寻常字符的别名和名称使用双引号。 SELECT * FROM USERS 'Users' 在 SQL Server 中不起作用,但 SELECT * FROM USERS "Users" 可以。
在我意识到一个简单的规则之前,我总是会出错:[S] 单引号用于 [S] 字符串,[D] 双引号用于 [D] 数据库中的事物
您应该使用双引号作为标识符。单引号不符合标准。
SELECT PRODUCT.id 'product_id'在 Oracle 中工作。单引号用于字符文字。它们不能用于(标准)SQL 中的标识符(尽管一些 DBMS 在引用标识符时忽略了 SQL 标准)
N
NaN

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

[S] 单引号用于 [S] 字符串文字(日期文字也是字符串);

[D] 双引号用于 [D] 数据库标识符;

例子:

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

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


澄清一下,无论是否启用 ANSI_QUOTES,都可以使用反引号 (`) 来分隔标识符,但如果启用了 ANSI_QUOTES,则“您不能使用双引号来引用文字字符串,因为它被解释为标识符。” (source)。 (这一切都假设你在谈论 MySQL,请注意。)
但是 [S] 单引号也适用于 [D]ate 文字。 :-/
C
Community

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

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

也可以看看:

不同的数据库是否使用不同的名称引用?

您可以让 MySQL 根据 ANSI 标准使用双引号:

SET GLOBAL SQL_MODE=ANSI_QUOTES

您可以让 Microsoft SQL Server 根据 ANSI 标准使用双引号:

SET QUOTED_IDENTIFIER ON

M
MarkR

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

单引号用于字符串。

然而,MySQL 忽略了这个标准(除非它的 SQL_MODE 改变了),并允许它们可互换地用于字符串。

此外,Sybase 和 Microsoft 还使用方括号来引用标识符。

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

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


MySql 使用反引号 ` 进行标识符引用。 (只是为了完成)
示例:如果您想将 Postgres 列命名为“日期”(保留),则需要将其双引号。
g
guettli

我使用这个助记符:

单引号用于字符串(一件事)

双引号用于表名和列名(两件事)

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


human being 与其他使用 SQL 的动物不同。 :D
用作表格假名的标识符应该使用哪些引号? (例如,在我们编写的连接查询中,...... from "table_name" as t1 JOIN ......) t1 应该包含在什么中?
每个字符串都需要引号吗?
m
majidshakeelshawl

要记住的两件事:

单引号('):字符串或文本

select * from employees where room_name = 'RobinCapRed';

其中 RobinCapRed 是字符串或文本。

双引号(“):列名或表名

select "first_name" from "employees";

其中 first_Name 是员工表中的列名


A
Ayushh Srivastava

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

当您想使用中间有空格的别名时,您可以使用双引号来引用该别名。

例如

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

这是一个订单表的子查询,其中 account_id 作为外键,我正在汇总该子查询以了解每个帐户下的订单数。在这里,出于目的,我给一列任何随机名称作为“计数”。

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

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

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