This is more of a comment than a complete answer, but may steer you in the right direction.
You will have to define a similarity metric that compares two strings and returns a value that quantifies the similarity between them. See, for example, A better similarity ranking algorithm for variable length strings. How you implement that to use in a SQL query depends on what DBMS you're using. You will also have to establish a threshold value of this metric that you want to define as 'close enough'.
Then you can write a SQL query something like this:
select
a_val as group,
b_val as stringval
from
(
select
a_val,
b_val,
similarity
from
(
select
a.stringval as a_val,
b.stringval as b_val,
sim_metric(a.stringval, b.stringval) as similarity
from
stringlist as a,
stringlist as b
where
b.stringval >= a.stringval
) as sim
where
similarity > similarity_threshold
) as grp
order by
a_val;
where sim_metric()
is your similarity function and similarity_threshold
is your chosen threshold. One name in each group of similar names is used as the group name.