我正试图在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' ) );