【问题标题】:Invalid identifier when comparing to string in SQL Server 2014与 SQL Server 2014 中的字符串进行比较时标识符无效
【发布时间】:2015-09-05 11:17:12
【问题描述】:

我正在尝试使用 HackerRank 挑战自学 SQL,目前我正在尝试选择亚洲所有指定城市的人口总和。

表结构为:

对于City 表:

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

对于Country 表:

+----------------+-------------+
| Field          | Type        |
+----------------+-------------+
| Code           | char(3)     |
| Name           | char(52)    |
| Continent      | char(50)    |
| Region         | char(26)    |
| SurfaceArea    | float(10,2) |
| IndepYear      | smallint(6) |
| Population     | int(11)     |
| LifeExpectancy | float(3,1)  |
| GNP            | float(10,2) |
| GNPOld         | float(10,2) |
| LocalName      | char(45)    |
| GovernmentForm | char(45)    |
| HeadOfState    | char(60)    |
| Capital        | int(11)     |
| Code2          | char(2)     |
+----------------+-------------+

我的查询是:

SELECT 
    SUM(Population) 
FROM 
    (SELECT 
         City.Population AS Population, 
         Country.Continent AS Continent 
     FROM 
         City 
     INNER JOIN 
         Country ON City.CountryCode = Country.Code) 
WHERE 
    Continent = "Asia";

据我所知,这应该是国家代码与亚洲国家代码相同的所有城市的人口总数。但是,我收到以下错误:

第 1 行出现错误:ORA-00904:“亚洲”:标识符无效

【问题讨论】:

  • 使用'Asia' 代替" 使用'
  • @lad2025 成功了,谢谢;那么在 SQL Server 中双引号 " 有什么用呢?
  • 如果您使用的是 SQL Server - 为什么会收到 ORA-00904 错误??
  • @Shaktal 如果您想了解更多关于 SQL Server 的信息,您可以使用Channel 9 提供的视频讲座,它们几乎涵盖了所有主题,请搜索 SQL。

标签: sql sql-server


【解决方案1】:

使用'Asia' 而不是"Asia"默认字符串字面量'括起来。

您可以在表/对象标识符中使用",例如:

SqlFiddleDemo

CREATE TABLE "a c"(b iNT);

INSERT INTO "a c"(b)
VALUES (2), (3);

SELECT *
FROM "a c";

但你应该使用[] 来引用 db 对象名称,例如:

CREATE TABLE [a c](b iNT);

INSERT INTO [a c](b)
VALUES (2), (3);

SELECT *
FROM [a c];

请注意,这仅在 SET QUOTED_IDENTIFIER ON 时有效。

当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以用双引号分隔,字面量必须用单引号分隔

要将"" 用作字符串文字,请使用:

SET QUOTED_IDENTIFIER OFF;

SELECT SUM(Population) FROM 
   (SELECT City.Population AS Population, 
           Country.Continent AS Continent 
    FROM City INNER JOIN Country 
    ON City.CountryCode = Country.Code) 
WHERE Continent = "Asia";

【讨论】:

  • 我很高兴收到更多反馈,为什么我投了反对票。所以我可以改进我的答案。
猜你喜欢
  • 2018-10-02
  • 2010-09-05
  • 2013-07-28
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多