SQL中的单引号和双引号有什么区别?
单引号用于指示SQL中字符串的开头和结尾 . 双引号通常不在SQL中使用,但可能因数据库而异 .
坚持使用单引号 .
无论如何,这是主要用途 . 您可以对列别名使用单引号 - 您希望在应用程序代码中引用的列名称不是在数据库中实际调用列的名称 . 例如: PRODUCT.id 将更具可读性 product_id ,因此您可以使用以下任一方法:
PRODUCT.id
product_id
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
要么在Oracle,SQL Server,MySQL中运行......但我知道有些人说使用单引号方法时TOAD IDE似乎有些悲痛 .
当列别名包含空格字符时,您必须使用单引号,例如 product id ,但不建议将列别名设为多个单词 .
product id
单引号分隔字符串常量或日期/时间常量 .
双引号分隔标识符,例如表名或列名 . 这通常仅在您的标识符不符合简单标识符的规则时才需要 .
也可以看看:
您可以根据ANSI标准使MySQL使用双引号:
SET GLOBAL SQL_MODE=ANSI_QUOTES
您可以使Microsoft SQL Server根据ANSI标准使用双引号:
SET QUOTED_IDENTIFIER ON
两个简单的规则让我们记住在哪种情况下使用什么:
[ S ]单引号适用于[ S ]条; [ D ]双引号用于[ D ] atabase标识符;
` 符号与 " 符号相同 . 您可以在启用ANSI_QUOTES的情况下使用 " .
在ANSI SQL中,双引号引用对象名称(例如表),它们允许它们包含其他方式不允许的字符,或者与保留字相同(实际上避免这样) .
单引号用于字符串 .
但是,MySQL没有注意到标准(除非它的SQL_MODE被更改)并且允许它们可互换地用于字符串 .
此外,Sybase和Microsoft还使用方括号进行标识符引用 .
所以这是一个特定的供应商 .
其他数据库,如Postgres和IBM实际上遵守ansi标准:)
我用这个助记符:
单引号用于字符串(一件事)
双引号用于表名和列名(两件事)
根据规格,这不是100%正确,但这个助记符有助于我(人类) .
不同之处在于它们的使用 . 单引号主要用于引用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;
您也可以将相同的大小写应用于Common Table表达式 .
6 回答
单引号用于指示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
,但不建议将列别名设为多个单词 .单引号分隔字符串常量或日期/时间常量 .
双引号分隔标识符,例如表名或列名 . 这通常仅在您的标识符不符合简单标识符的规则时才需要 .
也可以看看:
您可以根据ANSI标准使MySQL使用双引号:
您可以使Microsoft SQL Server根据ANSI标准使用双引号:
两个简单的规则让我们记住在哪种情况下使用什么:
[ S ]单引号适用于[ S ]条; [ D ]双引号用于[ D ] atabase标识符;
` 符号与 " 符号相同 . 您可以在启用ANSI_QUOTES的情况下使用 " .
在ANSI SQL中,双引号引用对象名称(例如表),它们允许它们包含其他方式不允许的字符,或者与保留字相同(实际上避免这样) .
单引号用于字符串 .
但是,MySQL没有注意到标准(除非它的SQL_MODE被更改)并且允许它们可互换地用于字符串 .
此外,Sybase和Microsoft还使用方括号进行标识符引用 .
所以这是一个特定的供应商 .
其他数据库,如Postgres和IBM实际上遵守ansi标准:)
我用这个助记符:
单引号用于字符串(一件事)
双引号用于表名和列名(两件事)
根据规格,这不是100%正确,但这个助记符有助于我(人类) .
不同之处在于它们的使用 . 单引号主要用于引用WHERE,HAVING中的字符串以及一些内置SQL函数,如CONCAT,STRPOS,POSITION等 .
如果要使用中间有空格的别名,则可以使用双引号来引用该别名 .
例如
这是来自订单表的子查询,其中account_id为外键,我正在聚合以了解每个帐户放置了多少订单 . 为了达到目的,我在这里给了一列任意随机名称“count of” .
现在让我们编写一个外部查询来显示“count of”大于20的行 .
您也可以将相同的大小写应用于Common Table表达式 .