在ORACLE中有没有一种不区分重音的GROUP BY方法



我正试图在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语句不区分重音。

如果您使用的是最新版本,则可以使用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<gt;小提琴

您需要将其转换为不带重音的编码
注意,无论SELECT中使用什么,都需要对其进行转换,否则会出现错误。

USE GROUP BY CONVERT( City, 'US7ASCII' ) 

注意:如果这是一个大表和/或您将经常以这种方式查询它,则应考虑创建索引以加快查询速度。

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

最新更新