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

Nat*_*n H 212 sql sql-server

我的一个专栏叫做from.我无法更改名称,因为我没有成功.我是否允许做类似的事情SELECT from FROM TableName或是否有特殊的语法来避免SQL Server混淆?

tva*_*son 331

将列名称包含在括号中,如此,from变为[from].

select [from] from table;
Run Code Online (Sandbox Code Playgroud)

也可以使用以下内容(在查询多个表时很有用):

select table.[from] from table;
Run Code Online (Sandbox Code Playgroud)

  • 那么:`从TableName中选择TableName.from;`PS:它适用于MySQL (10认同)
  • 这个答案也是为SQlite做的正确方法. (7认同)

som*_*ome 22

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

select "from" from "table";
Run Code Online (Sandbox Code Playgroud)

注意:内部PostgreSQL会自动将所有未引用的命令和参数转换为小写.这会导致命令和标识符不区分大小写.来自tAblE的sEleCt*; 被解释为select*from table; .但是,双引号内的参数按原样使用,因此区分大小写:select*from"table"; 从"表格"中选择*; 从两个不同的表中获取结果.

  • 双引号也适用于 MS SQL,但不区分大小写。AFAIK,带引号的标识符只是括号分隔标识符的等效替代。 (2认同)

Cad*_*oux 20

在你这样做的时候 - 将它别名为别的(或者更好的是,使用视图或SP并弃用旧的直接访问方法).

SELECT [from] AS TransferFrom -- Or something else more suitable
FROM TableName
Run Code Online (Sandbox Code Playgroud)


Sun*_*pil 12

这是两种方法:

  1. 使用返回引用如下:

SELECT`from` FROM TableName

  1. 你可以提到表名为:

SELECT TableName.from FROM TableName


Eig*_*gir 10

你的问题似乎在这里得到了很好的解答,但我只是想在这个问题上再添加一条评论.

那些设计数据库的人应该清楚地知道保留的关键字并避免使用它们.如果您发现有人使用它,请以相关的方式通知他们(以礼貌的方式).这里的关键字是保留字.

更多信息:

"保留的关键字不应该用作对象名称.从早期版本的SQL Server升级的数据库可能包含标识符,这些标识符包含早期版本中未保留的单词,但它们是当前版本的SQL Server的保留字.您可以参考对象通过使用分隔标识符直到名称可以更改." http://msdn.microsoft.com/en-us/library/ms176027.aspx

"如果您的数据库确实包含与保留关键字匹配的名称,则在引用这些对象时必须使用分隔标识符.有关更多信息,请参阅标识符(DMX)." http://msdn.microsoft.com/en-us/library/ms132178.aspx

  • 更好的是,总是使用括号作为数据库对象. (2认同)

Joh*_*man 8

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

select [select]
from [table]
Run Code Online (Sandbox Code Playgroud)


Kun*_* Wu 8

在 Apache Drill 中,使用反引号:

select `from` from table;
Run Code Online (Sandbox Code Playgroud)