何时在T-SQL中使用单引号或双引号

14 浏览
0 Comments

何时在T-SQL中使用单引号或双引号

在SQL中,单引号和双引号有何区别?

0
0 Comments

在T-SQL中,单引号用于界定字符串常量或日期/时间常量。双引号用于界定标识符,例如表名或列名。通常只有在标识符不符合简单标识符规则时才需要使用双引号。

有时候,我们需要在T-SQL中使用双引号来界定标识符,但默认情况下,T-SQL使用的是单引号。这可能会导致一些问题。为了解决这个问题,我们可以按照ANSI标准来设置MySQL和Microsoft SQL Server使用双引号。

对于MySQL,我们可以通过以下代码来设置使用双引号:

SET GLOBAL SQL_MODE=ANSI_QUOTES

对于Microsoft SQL Server,我们可以通过以下代码来设置使用双引号:

SET QUOTED_IDENTIFIER ON

这样一来,我们就可以在T-SQL中使用双引号来界定标识符,而不会出现问题。如果你对这个问题有更多的疑问,可以参考以下链接:Do different databases use different name quote?

0
0 Comments

在T-SQL中,我们需要知道何时使用单引号或双引号的简单规则:

- 单引号用于字符串字面量(日期字面量也是字符串);

- 双引号用于数据库标识符。

例如:

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

在MySQL和MariaDB中,反引号(`)符号与双引号(")符号相同。请注意,当你的SQL_MODE启用了ANSI_QUOTES时,你不能使用双引号来引用字面字符串。

需要澄清的是,反引号(`)可用于限定标识符,无论是否启用了ANSI_QUOTES。但是,如果启用了ANSI_QUOTES,则“你不能使用双引号引用字面字符串,因为它被解释为标识符。”(来源)。这一切都假设你在谈论MySQL。

但是,单引号也用于日期字面量。

0
0 Comments

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

单引号的主要用途是用于列别名,其中您希望在应用程序代码中引用的列名与数据库中实际列名不同。例如:PRODUCT.id可以更清晰地表示为product_id,因此可以使用以下任一方式:

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

在Oracle、SQL Server、MySQL等数据库中,这两种方式都可以使用,但有人说在使用单引号的方法时,TOAD IDE可能会出现一些问题。如果列别名包含空格字符,例如product id,则必须使用单引号,但不建议列别名超过一个单词。

双引号通常用于对象名称(例如列名"First name")。这是SQL-92标准的一部分。

您是指列别名吗?如果您这么说的话 - 我只见过并/或使用AS column_name表示法,或者在列引用后使用单引号提供别名。如果列别名包含空格字符(我不建议这样做),则必须将别名括在单引号中。

不,我指的是列名,但也涉及到别名。我建议使用双引号来标识使用不寻常字符的别名和名称,因为这是SQL-92标准的要求。在SQL Server中,SELECT * FROM USERS 'Users'是错误的,但SELECT * FROM USERS "Users"是正确的。

我总是搞错这一点,直到我意识到一个简单的规则:[S]ingle quote用于[S]trings,[D]ouble quote用于在[D]atabase中的事物。

您应该使用双引号来标识符。单引号违反了标准。

SELECT PRODUCT.id 'product_id'在Oracle中不会工作。单引号用于字符字面量。它们不能用于标识符(尽管一些DBMS在处理带引号的标识符时忽略了SQL标准)。

我认为添加到这个答案中的信息将会有所帮助:'"在语言上被视为相同的东西,使用其中之一是一种惯例。我来到这里是为了确认"是否对字符串进行预处理,因为在某些语言中,单引号和双引号的处理方式不同(比如Php等)。答案对此没有直接给出明确的解释,但更多地是暗示,我认为直接将其添加到答案中将有所帮助。无论如何都要+1。

在PostgreSQL中,双引号用于列名。

在PostgreSQL中,如果要使DB标识符区分大小写,则必须使用双引号,例如MYTABLE不带引号与mytable相同,而大写版本为"MYTABLE"。因此,我倾向于始终使用双引号。此外,如ceruleus所链接的,如果名称是保留标识符,也需要双引号,这是始终使用双引号的另一个原因。

0