有没有办法在 ORACLE 中对重音不敏感进行 GROUP BY?

Is there a way to GROUP BY accent insensitive in ORACLE?

我试图在 ORACLE DBMS 中执行 GROUP BY 语句,当我发现有些变量像 CITY 一样对重音敏感时。

例如,假设我想发出以下 SQL 请求:

SELECT city, COUNT(*)
FROM restaurant
WHERE pricing='High'
GROUP BY city;

那么我的输出将是

-----------------
|CITY  |COUNT(*)|
-----------------
|Bogota|      10|
-----------------
|Bogotá|       5|
-----------------

当我想要的输出是:

-----------------
|CITY  |COUNT(*)|
-----------------
|Bogota|      15|
-----------------

我想知道是否有办法在不修改表格的情况下使 GROUP BY 语句不区分重音。

您需要将其转换为不带重音符号的编码。
注意你需要在 SELECT 中使用它的任何地方转换它,否则你会得到一个错误。

USE GROUP BY CONVERT( City, 'US7ASCII' ) 

注意如果这是一个很大的 table and/or 您将经常以这种方式查询它,您应该考虑创建一个索引来加速查询。

CREATE INDEX index_city_no_accents ON table_name ( CONVERT( City, 'US7ASCII' ) );

如果您使用的是最新版本,您可以使用 COLLATE:

SELECT city COLLATE UCA0700_DUCET_AI as city, COUNT(*)
FROM restaurant
WHERE pricing='High'
GROUP BY city COLLATE UCA0700_DUCET_AI;
CITY    COUNT(*)
------  --------
Bogota  15

这还将涵盖不同的大小写和重音。

db<>fiddle