在 SQL 服务器(或任何 SQL 语言)中,您可以按单词变体分组吗?

In SQL Server (or any SQL Language), can you group by Word Variations?

我相信答案是否定的,但也许有人有一个绝妙的解决方法: 可以(你做)SQL Group By word variations?

变体示例 Run: Run, Ran, Running, RunsGoose: Goose, Geese

我知道不做这类事情的原因有很多,我相信这里会分享一些,但我有一个小项目,这会有所帮助。如果没有创建我自己的个人字典 table,这并没有发生,或者没有大量的 replace 或 case 语句,有没有人有实用的 方法来做到这一点?我目前在 SQL 服务器上工作,但任何 SQL 语言都是一个受欢迎的答案。

您正在根据单词的 STEM 进行分组。寻找 SQL 词干: and SQL word root matching

或者您可以使用 SQL soundex 函数来查找两个词是否相似:

SELECT SOUNDEX(word), COUNT(*) FROM tbl GROUP BY SOUNDEX(word)

@Y.L 在这个问题上值得称赞,但由于答案在评论中,我不确定如何将其标记为正确答案?不管怎样,下面是代码的基础知识:

drop table if exists dbo.attempt1
create table dbo.attempt1 ( tempid int IDENTITY(1,1) PRIMARY KEY, word varchar(50) )

CREATE UNIQUE INDEX cx_uid ON dbo.attempt1(tempid);
CREATE FULLTEXT INDEX ON dbo.attempt1(word) 
 KEY INDEX cx_uid
 WITH STOPLIST = SYSTEM;

insert into dbo.attempt1 (word)
     values ('Run'), ('Runs'), ('Running'), ('Ran'), ('Goose'), ('Geese')

最后

SELECT * FROM dbo.attempt1 WHERE contains(word,'FORMSOF(INFLECTIONAL, goose)')

SELECT * FROM dbo.attempt1 WHERE freetext(word,'run')