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

10 浏览
0 Comments

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

我的一列叫做from。我不能改变它的名称,因为它不是我创建的。\n我可以像这样做吗:SELECT from FROM TableName,还是有特殊的语法可以避免使SQL Server混淆?

0
0 Comments

在使用SQL时,有时会遇到列名与SQL关键字冲突的情况。下面是两种解决方法:

1. 使用反引号(back quote)来标识列名,例如:

SELECT `from` FROM TableName

通过使用反引号,可以将列名作为普通的标识符来处理,从而避免与SQL关键字的冲突。

2. 可以在列名前面加上表名来进行区分,例如:

SELECT TableName.from FROM TableName

通过在列名前面加上表名,可以明确指定要查询的是哪个表的哪个列,从而避免与SQL关键字的冲突。

感谢提问者的建议,双引号和方括号的语法在我的客户端(MySQLWorkbench)中无效,但使用反引号的方法有效。

0
0 Comments

解决 SQL 列名与关键字冲突的问题的方法是在列名周围使用双引号。在 PostgreSQL 中,可以使用以下语法:

select "from" from "table";

需要注意的是,在 PostgreSQL 内部,所有未加引号的命令和参数都会自动转换为小写。这意味着命令和标识符不区分大小写。例如,sEleCt * from tAblE; 会被解释为 select * from table;。然而,双引号内的参数会保持原样,因此是区分大小写的。例如,select * from "table";select * from "Table"; 会从两个不同的表中获取结果。

双引号也适用于 MS SQL,但不区分大小写。引号括起来的标识符只是等效于方括号括起来的标识符的替代方式。

在由亚马逊 Athena 使用的 Presto SQL 查询引擎中,双引号也适用。

0
0 Comments

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

在SQL查询中使用方括号将列名包裹起来,如

[from]

select [from] from table;

在查询多个表时,也可以使用以下方法:

select table.[from] from table;

对于MySQL,可以尝试以下方法:

select TableName.from from TableName;

但是,这种方法在我的MySQL安装中似乎不起作用。是否有参数或其他方法可以打开此功能?

可以尝试使用反引号,参考stackoverflow.com/questions/2901453/…,这个问题和答案是针对MS SQL Server的。

但是,我提到了在MySQL中可以工作。我在本地MySQL安装中尝试后,通过谷歌搜索找到了这里。我想知道是否有一种通用的ANSI SQL方式可以转义SQL中的这种内容。我们目前正在使用SQL Server 2005,但是我们的其他应用程序中也使用了Oracle。我们希望以这种方式编写Java DAO,以便如果我们被告知从SQL Server迁移到其他数据库,它可以正常工作。

我从来没有遇到过这种情况。:)

你提供的不使用方括号的tablename.columnname的解决方案似乎在SQL Server 2017中不起作用。但使用方括号的方法是可以的。

通常情况下,对于任何与SQL Server命令相同的列名,都需要使用方括号,如TableName.[from]

0