【问题标题】:What is the difference between single and double quotes in SQL?SQL中的单引号和双引号有什么区别?
【发布时间】:2010-12-31 19:53:29
【问题描述】:

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

【问题讨论】:

    标签: sql database quotes


    【解决方案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,但不建议列别名超过一个单词。

    【讨论】:

    • 双引号通常用于对象名称(例如列名“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 标准)
    【解决方案2】:

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

    • [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 文字。 :-/
    【解决方案3】:

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

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

    另见:

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

    SET GLOBAL SQL_MODE=ANSI_QUOTES
    

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

    SET QUOTED_IDENTIFIER ON
    

    【讨论】:

      【解决方案4】:

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

      单引号用于字符串。

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

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

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

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

      【讨论】:

      • MySql 使用反引号 ` 来引用标识符。 (只是为了完成)
      • 示例:如果您想将 Postgres 列命名为“日期”(保留),则需要将其双引号。
      【解决方案5】:

      我用这个助记词:

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

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

      【讨论】:

      • human being 与其他使用 SQL 的动物相反。 :D
      • 对于用作表格假名的标识符应该使用哪些引号? (例如,在我们编写的连接查询中,...... from "table_name" as t1 JOIN ......) t1 应该包含在什么中?
      【解决方案6】:

      区别在于它们的用法。单引号主要用于在 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;
      

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

      【讨论】:

        【解决方案7】:

        要记住的两件事:

        Single Qutoes(') : StringText

        select * from employees where room_name = 'RobinCapRed';
        

        其中 RobinCapRed 是 字符串文本

        双引号("): 列名表名

        select "first_name" from "employees";
        

        其中 first_Name 是 employees 表

        中的列名

        【讨论】:

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