面对SQL中的"Cote d'Ivoire"这样的值,你怎么能return得到结果呢?

How can you return the result when facing values such as "Cote d'Ivoire" in SQL?


我制作了一个 PostgreSQL Table,其中包含牛津大学政府响应追踪器处理 COVID-19 的数据。
如果有人感兴趣,这里是 link 到 data source

您可以下载 JSON 或 CSV;在我的例子中,我使用的是 CSV 格式。
该文件包含以下列:

CountryName
CountryCode
Date    
C1_School closing   
C1_Flag 
C2_Workplace closing    
C2_Flag 
C3_Cancel public events 
C3_Flag 
C4_Restrictions on gatherings   
C4_Flag C5_Close public transport   
C5_Flag 
C6_Stay at home requirements    
C6_Flag 
C7_Restrictions on internal movement    
C7_Flag 
C8_International travel controls    
E1_Income support   
E1_Flag 
E2_Debt/contract relief 
E3_Fiscal measures  
E4_International support    
H1_Public information campaigns 
H1_Flag 
H2_Testing policy   
H3_Contact tracing  
H4_Emergency investment in healthcare   
H5_Investment in vaccines   
M1_Wildcard 
ConfirmedCases  
ConfirmedDeaths 
StringencyIndex 
StringencyIndexForDisplay   
StringencyLegacyIndex   
StringencyLegacyIndexForDisplay 
GovernmentResponseIndex 
GovernmentResponseIndexForDisplay   
ContainmentHealthIndex  
ContainmentHealthIndexForDisplay    
EconomicSupportIndex    
EconomicSupportIndexForDisplay

回到问题,所以我想创建一个简单的 SQL 查询,例如这个

SELECT * FROM govt_respond_tracker
WHERE countryname in ('list_of_african_countries')
Order BY countryname ASC,
datec ASC;

这个查询的想法是调用文件中可用的所有非洲国家。
然而,当我正要打电话给“Cote d'Ivoire”(科特迪瓦)时,问题出现了。
单引号导致错误,阻止返回我想要的结果。

我想要的结果只是 SQL 输出,其中包含“科特迪瓦”作为其在 SQL 输出中的值。

那么,我的问题是我解决这个问题的最佳方法是什么?

非常感谢您的宝贵时间!

要转​​义 ',您需要将其加倍:

'Cote d''Ivoire'

您可以将单引号替换为双单引号,例如 '' 'Cote d''Ivoire' 另一个是您可以使用 (E'\') 例如E'Cote d\'Ivoire' 转义单引号

我认为最好的办法是对列表进行硬编码

SELECT * FROM govt_respond_tracker
WHERE countryname in ('country1', 'country2', 'Cote d''Ivoire')
Order BY countryname ASC,
datec ASC;

为了保持输入文本的完整性,您还可以将封闭标记从单引号更改为另一个(一组)字符,例如 $$

select $$Cote d'Ivoire$$;
   ?column?
---------------
 Cote d'Ivoire
(1 row)