sql - 如何从表中的一列或多列中提取唯一的字符列表

标签 sql sql-server

作为数据清理练习的一部分,我需要提供在几个名称字段中使用的唯一字符列表。例如,假设我有一个人员表,其中有两列,分别称为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/

相关文章:

查找表上的 SQL 主键还是唯一约束?

java - 在 Spring Data JPA 中保留两个不同模式之间具有父子关系的表

javascript - 我的接收器如何输入消息并显示在我的浏览器上

sql - 从 SQL 数据库读取时如何指定字段数据类型

sql - 将编译后的 Linq To SQL 与 ExecuteMethodCall 结合使用

sql-server - 将一个表数据复制到同一服务器 Azure 服务中的另一个数据库表

sql - 如何获取特定存储过程中使用的所有表名称?

php - IIS 上的 MSSQL 和 PHP 5.3.5 之间的连接不起作用

php - 取决于项目查询的意外项目评论

c++ - c++中的sqlite3创建语句和外键