sql - 在 SQL Server 2008 中模拟没有自定义函数的 STRING_SPLIT

标签 sql sql-server sql-server-2008 tsql

它被问过很多次,但不是这样。

我在 SQL Server 2008 上,没有 STRING_SPLIT 函数(与 2016 年一样)。

查询返回以下行,请参见下面的单个示例行。您在下面看到的 bald 实际上是一个字段,所以一个 varchar 列包含它:

Appple|10|admin|845687|Apr|26|11:32:29|2016|AwesomeApplication.zip

我想用竖线 | 字符拆分。

我无法为此编写 CTE 或自定义函数。

我必须使用内置的字符串函数(如 CHARINDEXPATINDEX)在一个选择语句中将单个竖线分隔的元素提取到不同的列中。

有人知道吗?

最佳答案

DECLARE @Result Table(Value varchar(50))
DECLARE @x XML
SELECT @X = CAST('<A>' + REPLACE(@StringList, '|', '</A><A>') + '</A>' AS XML)

INSERT INTO @Result
SELECT t.value('.', 'varchar(50)') as inVal
FROM @X.nodes('/A') AS x(t)

这将创建一个包含一列(值)的表。以竖线分隔的字符串中的每个拆分值都将在此表中创建一个新记录。然后你可以随心所欲地加入它。如果不清楚或者它不适用于 SQL 2008,请告诉我。

如果需要,您可以增加 varchar 的大小 - 您可以修改查询以拆分不同的值(逗号分隔等)。

关于sql - 在 SQL Server 2008 中模拟没有自定义函数的 STRING_SPLIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078170/

相关文章:

sql-server - LLBLGen 级联删除?

sql - 如何减去下一行SQL Server中的列值

sql-server - Windows用户的数据库级别权限,同时为该用户和包含AD组创建的登录名?

sql-server-2008 - SQL 2008 存储过程每隔一段时间运行成功

sql - CONTAINSTABLE 通配符在短语匹配上失败?

mysql - 如何优化每个用户的自定义搜索结果

php - 使用先前查询的值获取更多结果

mysql - 将 MySQL 数据库导入 SQL Server

mysql - 如何在mysql查询中插入今天的日期?

mysql - PHP MySQL 从 3 个表中选择