sql - 使用标签分隔和拆分字符串
问题描述
我有一列的值由标签分隔。如何在 SQL Server 中将其拆分为三列。这些列应该是包含相应文本作为文本值的“应用程序”、“访问级别”和“限制”。我正在使用 SQL Server 管理系统 2012。
下面是我试图拆分的值:
<b>Application</b> : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.<br/><b>Access Level</b> : CLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod. <br/><b>Restrictions</b> : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.
我的代码尝试:
select
substring(ColumnName,1,charindex('br/><b>Access Level</b> : ',ColumnName)-1) as 'Application',
substring(ColumnName,charindex('<br/><b>Access Level</b> : ',ColumnName)+1,len(ColumnName)) as 'Access Level',
substring(ColumnName,charindex('<br/> <b>Restrictions</b> : ',ColumnName)+1,len(ColumnName)) as 'Restrictions'
from TableName
解决方案
请尝试以下解决方案。
假设您拥有 SQL Server 2016 或更高版本。
您的数据非常类似于 JSON:
- 将输入列转换为合法的 JSON。
- 使用
JSON_VALUE()
函数一一检索名称/值对。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, unstructured NVARCHAR(MAX));
INSERT INTO @tbl (unstructured) VALUES
('<b>Application</b> : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.<br/>
<b>Access Level</b> : CLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod. <br/>
<b>Restrictions</b> : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.');
-- DDL and sample data population, end
SELECT ID, unstructured
, JSON_VALUE(JSON, '$.Application') AS [Application]
, JSON_VALUE(JSON, '$."Access Level"') AS [Access Level]
, JSON_VALUE(JSON, '$.Restrictions') AS [Restrictions]
FROM @tbl
CROSS APPLY (VALUES ('{' + REPLACE(REPLACE(REPLACE(unstructured
,'<b>', '"')
,'</b> : ', '":"')
,'<br/>', '",') + '"}'
)) AS R(JSON);
推荐阅读
- javascript - 为什么我们还要在 html 中使用表单元素?
- python - 带有 Apache 光束 TypeError 的云发布/订阅
- c - 如何使用 gdb 将反汇编语法更改为 intel?
- c# - C# - 我应该从什么集合大小开始使用 Dictionary
- android - Android/Kotlin:我尝试创建一个简单的Singleton,但是当我想使用它时,它并没有导入我想使用的类中的类
- xaml - 当绑定到自定义类的 IsEnabled 时,样式触发器仅以一种方式工作
- vue.js - 为什么单击手风琴项会打开所有项?
- angularjs - 在 angular7 中创建新项目时出现此错误
- python - 将摄氏度转换为华氏度的程序
- java - Spring Boot 2.1.3 的一个问题