如何在T-SQL中分割字符串并保存到数组中
我正在编写一个游标来从主表填充新表中的数据,该主表包含以下方式的数据
项目 | 颜色 |
---|---|
衬衫 | 红色、蓝色、绿色、黄色 |
我想通过获取项目然后将其添加到行中来填充新表数据,根据它包含的每种颜色
项目 | 颜色 |
---|---|
衬衫 | 红色 |
衬衫 | 蓝色 |
衬衫 | 绿色 |
衬衫 | 黄色 |
我陷入了如何
- 定界/分割“颜色”字符串
- 将其保存在数组中
- 要在光标中使用它,
因为我将使用嵌套光标来实现此目的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
文章 在 Transact SQL 中伪造数组< /a> 详细介绍了解决此问题的几种技术,从使用 PARSENAME() 函数(限制为 5 项)到编写 CLR 函数。
XML 答案是可以针对特定场景选择的详细技术之一。
结合一些技巧,我解决了我的字符串拆分问题,如下所示:
请注意,考虑到字符串长度限制为 1000,您必须有一个包含 1000 行或更多行的表(示例 tsql 上的 dbo.Table)才能创建表变量 @该样本的编号。在文章中,他们有一个永久的枚举表。
The article Faking Arrays in Transact SQL details SEVERAL techniques to solve this problem, ranging from using the PARSENAME() function (limit to 5 items) to writing CLR functions.
The XML answer is one of the detailed techniques that can be chosen to a specific scenario.
Combining some of the tips, I solved my string split problem like this:
Note that, considering 1000 your string length limit, you must have a table with 1000 or more rows (dbo.Table on the sample tsql) to create the table variable @nums of this sample. On the article, they have a permanent enumeration table.
对于那些喜欢保持简单的人:
For those who like to keep it simple:
我刚刚完成了类似的事情,创建临时表以使用链接服务器上的 INFORMATION_SCHEMA 视图复制源表。但这是一个修改版本,用于创建您正在寻找的结果。只需记住在显示“颜色”列时删除最后两个字符即可。
I just accomplished something like this to create staging tables to replicate the source tables using the INFORMATION_SCHEMA views on a linked server. But this is a modified version to create the results you are look for. Just remember to remove the last two characters from the Colors column when displaying it.
在 SQL Server 2016+ 中,可以使用 STRING_SPLIT 函数
现在这很容易:
In SQL Server 2016+ one can use STRING_SPLIT function
Now this will be easy:
使用 Sql Server 2005+ 和 XML 数据类型,您可以查看以下内容
Using Sql Server 2005+ and the XML datatype, you can have a look at the following