面对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)
我制作了一个 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)