sql - 拆分列数据并插入 - SQL Server 存储过程

标签 sql sql-server split

我有一个表,有几十万行,数据格式是index(int),words nvarchar(1000)。单词字符串由以空格分隔的单词集合组成,例如 word1 word2 word3。我想阅读单词表并创建字典。就伪代码而言,这就是我想要的:

INSERT INTO dictionary (dictionaryword) 
SELECt splitBySpace(words) FROM word;

这很简单,可以用 Java 或 C# 编写代码,但我发现系统处理数据需要很长时间。在其他处理中,运行 SQL 来处理查询(即不使用 C# 或 Java 处理数据)的成本效益是巨大的。

我想创建一个存储过程来读取单词、拆分它们,然后创建字典。我见过各种有点复杂的拆分程序,例如 https://dba.stackexchange.com/questions/21078/t-sql-table-valued-function-to-split-a-column-on-commas但我看不出如何为读取整个数据库、拆分单词和插入单词的任务重新编码。

有没有人有示例代码来拆分列数据然后插入它,出于效率的原因可以完全在 SQL 中实现?

最佳答案

这是解决方案。

数据链接:

create table sentence(t varchar(100))

insert into sentence values
('Once upon a time in America'),
('Eyes wide shut')

DML:

select distinct ca.d as words from sentence s
cross apply(select split.a.value('.', 'varchar(100)') as d 
            from 
            (select cast('<x>' + REPLACE(s.t, ' ', '</x><x>') + '</x>' as xml) as d) as a 
             cross apply d.nodes ('/x') as split(a)) ca

输出:

words

a
America
Eyes
in
Once
shut
time
upon
wide

fiddle http://sqlfiddle.com/#!6/54dff/4

关于sql - 拆分列数据并插入 - SQL Server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30284522/

相关文章:

mysql - 从另一个表中选择具有备用有序字段的行

sql - SQL Server 的 LIMIT 和 OFFSET 等效吗?

sql - 我们可以在使用 DBCC CHECKIDENT 重新启动标识列计数后回滚到原始状态吗?

sql-server - 跨行拆分单行

sql - 使用 PostgreSQL 提取字符串结尾部分以外的所有内容

sql - Rails/SQL 如何让不同的工作人员处理不同的记录?

sql - "<>"在 Oracle 中是什么意思

sql-server - 如何显示和关闭所有事件的 RJDBC 连接

javascript - 使用 Split 函数对 Javascript 数组进行排序

c# - 按索引/参数拆分的字符串?