如何处理看起来像SQL关键字的SQL列名?

如何处理看起来像SQL关键字的SQL列名?,sql,sql-server,Sql,Sql Server,我的一个专栏名为from。我不能改名字,因为我没改。 是否允许我执行类似于从TableName中选择的操作或者是否有特殊语法来避免SQL Server被混淆?将列名用括号括起来,这样,from就变成了[from] select [from] from table; 还可以使用以下选项(在查询多个表时非常有用): 如果您使用的是SQL Server,只需将方括号括在列或表名周围即可 select [select] from [table] 在您执行此操作时,请将其别名为其他内容(或者更好,使用

我的一个专栏名为
from
。我不能改名字,因为我没改。
是否允许我执行类似于
从TableName中选择的操作
或者是否有特殊语法来避免SQL Server被混淆?

将列名用括号括起来,这样,
from
就变成了[from]

select [from] from table;
还可以使用以下选项(在查询多个表时非常有用):


如果您使用的是SQL Server,只需将方括号括在列或表名周围即可

select [select]
from [table]

在您执行此操作时,请将其别名为其他内容(或者更好,使用视图或SP并弃用旧的直接访问方法)


你的问题在这里似乎得到了很好的回答,但我只想对这个问题再补充一点意见

设计数据库的人应该很清楚保留的关键字,并避免使用它们。如果你发现有人在使用它,告诉他们(以礼貌的方式)。这里的关键字是保留字

更多信息:

“不应使用保留关键字 作为对象名。数据库已升级 来自早期版本的SQL Server 可能包含的标识符包括 前一段中未保留的单词 版本,但这是保留字 用于SQL Server的当前版本。 您可以使用 分隔标识符,直到名称 可以改变。”

“如果您的数据库确实包含名称 如果匹配保留关键字,则必须 使用分隔标识符时 参考这些对象。有关更多信息 有关详细信息,请参阅标识符(DMX)。”


如果是在PostgreSQL中,请在名称周围使用双引号,如:

select "from" from "table";

注意:在内部,PostgreSQL会自动将所有不带引号的命令和参数转换为小写。这使得命令和标识符不区分大小写从表中选择*解释为从表中选择*。但是,双引号内的参数按原样使用,因此区分大小写:select*from“table”从“表”中选择*从两个不同的表中获取结果

您可以将列名放在括号中,如:

Select  [from] from < ur_tablename>

这里我只假设您的_tablename只包含一列(即from)。

嗨,我在完全符合ANSI标准的Teradata系统上工作。使用双引号“”命名这些列

例如,
type
是SQL保留关键字,在引号中使用时,
type
被视为用户指定的名称

请参见下面的代码示例:

CREATE TABLE alpha1
AS
(
SEL
product1
type_of_product AS "type"
FROM beta1
) WITH DATA
PRIMARY INDEX (product1)

--type is a SQL reserved keyword

TYPE

--see? now to retrieve the column you would use:

SEL "type" FROM alpha1

当我试图更新一个名为关键字的专栏时,我遇到了同样的问题。上面的解决方案对我没有帮助。我通过如下简单地指定表的名称来解决这个问题:

UPDATE `survey`
SET survey.values='yes,no'
WHERE (question='Did you agree?')

我也面对过这个问题。 解决方法是在查询中这样放置[Column_Name]

string query= "Select [Name],[Email] from Person";

因此,它将非常好地工作。

以下各项将非常好地工作:

SELECT DISTINCT table.from AS a FROM table

以下是两种方法:

  • 在此处使用后引号:
  • 从TableName中选择“from”

  • 您可以使用表名提及:
  • 从TableName中选择TableName.from


    在Apache Drill中,使用反引号:

    select `from` from table;
    

    在MySQL中,除了使用反引号(`),您还可以使用UI更改列名。右键单击表>更改表>编辑包含sql关键字的列名>提交

    select [from] from <table>
    
    从中选择[from]
    

    请注意,从这里的答案和我自己的经验来看,上述内容在MySQL中不起作用。如果您打算进行移植,唯一可以接受的答案是不要对表、列或其他名称使用SQL关键字


    所有这些答案都适用于各种数据库,但显然很多答案不支持ANSI解决方案。

    双引号也适用于MS SQL,但不区分大小写。带引号的标识符只是括号分隔标识符的等效替代品。双引号也适用于Amazon的Athena使用的Presto SQL查询引擎。这假定
    [from]
    您的\u tablename
    拥有的唯一列。您从临时表中获得了什么?这似乎完全没有用,与问题无关。@rjmunro,不,这似乎不是完全没有用。我有一个例子,我从SQL查询一个表格多维数据集,它返回像“[Total]”这样的列的名称。也就是说,名称本身包含“[”和“]”。不能使用[[Total]]和[Total]检索此类列。最简单的方法是将查询结果放入临时表中。@darlove您不能使用引号:
    “[Total]”
    ?或者也许有一种方法可以逃避它,比如
    [\[Total\]]
    ?@rjmunro,在尝试了一点之后,我发现了另一种我不知道的方法:你可以将QUOTED\u标识符设置为ON,然后使用你所说的双引号“。所以,这只是另一种方式,但我不会完全放弃临时表选项。关于:
    select TableName.from TableName附言:它在MySQLI中有效我今天早上刚刚试过,但在我的MySQL安装中似乎不起作用。它是一个参数还是打开它的东西?@CodeChimp-尝试使用backticks,这个问题/答案是针对MS SQL Server的。是的,但是@fabriciph提到它在MySQL中工作。我在本地安装的MySQL上尝试了这一点后,正好在谷歌搜索的对面。我想看看是否有一种通用的ANSI SQL方法可以在SQL中转义类似的内容。我们目前正在使用SQLServer2005,但我们在其他一些应用程序中也使用了Oracle。我们希望以这样一种方式对Java DAO进行编码:如果有人告诉我们从SQL Server转移到其他服务器,它将“工作”。@CodeChimp我可以毫不费力地计算发生在我身上的次数。:)我
    
    SELECT DISTINCT table.from AS a FROM table
    
    select `from` from table;
    
    select [from] from <table>