【问题标题】:parsing nvarchar(max) data field in sql解析sql中的nvarchar(max)数据字段
【发布时间】:2017-08-22 19:40:34
【问题描述】:
我有一个像“marketplace-used-new-ebook-rental_new-rental_used”这样的字段,其中“rental_new”是一件等等。这是刺痛中所有可能的元素,但它们可以按任何顺序排列并包含一个或多个片段。我该如何分解它,以便我可以解释所有不同的组合?我也无法在这个数据库上创建函数。
【问题讨论】:
标签:
sql-server
tsql
split
【解决方案1】:
你真的有三个选择
做应用层的工作
写一个游标来做
使用 XML 来做
以下示例适用于 XML
注意:只有当您可以保证您的输入字符串不包含任何 XML 字符时,才能使用 XML。一个带有 或 & 的字符串,查询将失败。
SELECT distinct a.split_me
FROM
(
SELECT cast('<X>'+replace('marketplace-used-new-ebook-rental_new-
rental_used','-','</X><X>')+'</X>' as XML) as xml_convert
)xml_data
CROSS APPLY
(
SELECT fdata.D.value('.','nvarchar(50)') as split_me
FROM xml_data.xml_convert.nodes('X') as fdata(D)
) a
SQL Server 2016 有一个内置函数来分解数据,但在那之前它只是这三个选项之一。