提问人:Vineet 提问时间:1/3/2010 最后编辑:OMG PoniesVineet 更新时间:11/4/2021 访问量:262892
SQL 中的单引号和双引号有什么区别?
What is the difference between single and double quotes in SQL?
答:
单引号用于指示 SQL 中字符串的开头和结尾。双引号通常不用于 SQL,但这可能因数据库而异。
坚持使用单引号。
无论如何,这是主要用途。您可以对列别名使用单引号,您希望在应用程序代码中引用的列名与数据库中实际调用的列名不同。例如:将更具可读性,因此您可以使用以下任一方法:PRODUCT.id
product_id
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
两者都适用于 Oracle、SQL Server、MySQL......但我知道有些人说,TOAD IDE在使用单引号方法时似乎会给人一些悲伤。
当列别名包含空格字符时,必须使用单引号,例如 ,但不建议列别名包含多个单词。product id
评论
SELECT * FROM USERS 'Users'
SELECT * FROM USERS "Users"
SELECT PRODUCT.id 'product_id'
在 Oracle 中不起作用。单引号仅适用于字符文本。它们不能用于(标准)SQL 中的标识符(尽管某些 DBMS 在涉及引号标识符时会忽略 SQL 标准)
在 ANSI SQL 中,双引号引用对象名称(例如表),这允许它们包含其他不允许的字符,或者与保留字相同(真的避免这种情况)。
单引号用于字符串。
但是,MySQL忽略了该标准(除非其SQL_MODE被更改),并允许它们互换用于字符串。
此外,Sybase和Microsoft也使用方括号进行标识符引用。
所以它有点特定于供应商。
其他数据库,如 Postgres 和 IBM 实际上遵循 ansi 标准:)
评论
单引号分隔字符串常量或日期/时间常量。
双引号分隔标识符,例如表名或列名。通常,仅当您的标识符不符合简单标识符的规则时,才需要这样做。
另请参阅:
您可以按照ANSI标准使MySQL使用双引号:
SET GLOBAL SQL_MODE=ANSI_QUOTES
您可以使 Microsoft SQL Server 按照 ANSI 标准使用双引号:
SET QUOTED_IDENTIFIER ON
一个简单的规则,让我们记住在哪种情况下使用什么:
- [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
评论
我使用这个助记符:
- 单引号用于字符串(一件事)
- 双引号用于表名和列名(两件事)
根据规格,这不是 100% 正确的,但这个助记符可以帮助我(人类)。
评论
human being
与其他使用 SQL 的动物相反。:D
区别在于它们的用法。单引号主要用于引用 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;
您也可以将相同的大小写应用于公用表表达式。
要记住的两件事:
Single Qutoes(') : 字符串或文本
select * from employees where room_name = 'RobinCapRed';
其中 RobinCapRed 是字符串或文本。
double quotes(“) : 列名或表名
select "first_name" from "employees";
其中 first_Name 是 employees 表中的列名
评论