作为数据清理练习的一部分,我需要提供在几个名称字段中使用的唯一字符列表。例如,假设我有一个人员表,其中有两列,分别称为first_name和last_name,只有一行,如下所示:
first_name last_name
Elizabeth Smith
我希望能够产生以下结果:
letter
a
b
e
E
h
i
l
m
S
t
z
我认为递归公用表表达式是可行的方法。
最佳答案
试试这个SQL-Server 2005+
declare @tbl table (v1 varchar(100), v2 varchar(100))
insert into @tbl values ('asd','ssft'),(null,'la')
;with cte
as
(SELECT isnull(t.v1,'')+ISNULL(t.v2,'') as V, 1 as i, SUBSTRING(isnull(t.v1,'')+ISNULL(t.v2,''),1,1) Vi
FROM @tbl t
UNION ALL
SELECT V, CTE.i+1, SUBSTRING(V,i+1,1)
FROM cte
WHERE LEN(CTE.v)>=CTE.i+1
)
SELECT DISTINCT Vi --COLLATE Latin1_General_CS_AS
FROM cte
ORDER BY Vi --COLLATE Latin1_General_CS_AS
此外,您可能需要指定区分大小写 collation如果您希望大写字母和小写字母都出现在结果集中,请使用 COLLATE Latin1_General_CS_AS
(在代码中注释)。
关于sql - 如何从表中的一列或多列中提取唯一的字符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387599/