0

我有这样的数据表:

forename        surname
John            O'Neil
Aaron           O Neil
Peter           O-Neil
Mary            Tollmache-Tollmache
Beatrice        Tollmache Tollmache

所有数据都经过净化处理,因此它们只包含拉丁和拉丁补充字符表中的字符,以及空格 ( )、撇号 (') 和连字符 (-)。

执行 GROUP BY 时是否可以将字符空格 ( )、撇号 (') 和连字符 (-) 视为相同。

因此,以上表为例,以下查询:

SELECT surname, COUNT(*) AS cnt FROM tbl GROUP BY surname;

将返回:

surname                cnt
O'Neil                 3
Tollmache-Tollmache    2

更新:如果您像我一样使用此查询来构建其他表,Jim 的建议是一个有用的建议,但对于部署可能不是一个好主意。

使用 Jim 的建议,我对 surname 列索引的表进行了以下测试:

550,000 row table: 4.98 seconds
3.375 million row table: 27.62 seconds
12.485 million row table: 1 min 33 seconds
4

1 回答 1

1

您可以使用REPLACE将这些字符转换为空格(或撇号等)并检查:

SELECT surname, 
COUNT(*) AS cnt 
FROM tbl 
GROUP BY REPLACE(REPLACE(surname,"-"," "),"'"," ");

确保数据库中的数据采用您想要的格式而不是即时转换它可能是值得的。

于 2014-08-12T15:23:22.923 回答