有没有办法在 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
这还将涵盖不同的大小写和重音。
我试图在 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
这还将涵盖不同的大小写和重音。