Sql server 如何根据列中的值拆分列?

Sql server 如何根据列中的值拆分列?,sql-server,Sql Server,我有一个column1值 测试/优化条件:任务100:优化项\| 2018.04.11 00:01:37 \|N 我需要将column1拆分为2列,输出应该是 第1列应进行左修剪,直到:测试/良好条件 第2列应该从:TASK100:优雅项目开始,在第一列之前进行左修剪\ 预期产出 Column2 | Column3 ------------------------ --------------

我有一个column1值 测试/优化条件:任务100:优化项\| 2018.04.11 00:01:37 \|N

我需要将column1拆分为2列,输出应该是

第1列应进行左修剪,直到:测试/良好条件

第2列应该从:TASK100:优雅项目开始,在第一列之前进行左修剪\

预期产出

Column2                    |  Column3                            
------------------------     ----------------------------            
Test/ Elegant Conditions      TASK100: Elegant Item  
样本数据:

CREATE TABLE [Test]
(
    [Description] [varchar](250) NULL
)

insert into [Test] values ('Individual/ Team Actions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Individual/ Team Actions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions : TW08: Equipment Integrity\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions : TW01: Task Planning/ Preparation/ Manning\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions : TW03: Work Procedures - Availability and Suitability\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Individual/ Team Actions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions : TW17: Ventilation\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Individual/ Team Actions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Individual/ Team Actions : IT10: Hazard Recognition/ Perception\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Individual/ Team Actions : IT06: Procedural Compliance\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions : HF01: Complacency/ Motivation/ Attitude\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Task/ Environmental Conditions\|2018.04.11 00:01:37\|N');

insert into [Test] values ('Organisational Factors : OS06: Design\|2018.04.11 00:01:37\|N');  


insert into [Test] values ('Individual/ Team Actions\|2018.04.11 00:01:37\|N');

您可以在此处使用基本字符串函数:

SELECT
    column1,
    SUBSTRING(column1, 1, CHARINDEX(':', column1) - 1) AS column2,
    SUBSTRING(column1,
              CHARINDEX(':', column1) + 1,
              CHARINDEX('\', column1) - CHARINDEX(':', column1) - 1) AS column3
FROM yourTable
WHERE column1 LIKE '%:%\%';
大概是这样的:

declare @a varchar(300)

select @a = 'Test/ Elegant Conditions : TASK100: Elegant Item\|2018.04.11 00:01:37\|N '

select  @a C1,
        ltrim(rtrim(left(@a, charindex(':', @a)-1))) C2,
        ltrim(rtrim(substring(@a, charindex(':', @a)+1, charindex('\', @a)-(charindex(':', @a)+1) ))) C3
输出
你试过什么?Charindex不好?虽然第3列的标准是在``之前获取数据,但第2列的终点是模糊的?请更新您的问题,以添加更多捕获Column2数据的详细信息。还要添加更多示例数据以及您迄今为止尝试过的内容。@dhruvjoshi第3列的预期值为TASK100:第一个反斜杠前的优雅项您希望个人/团队操作值的输出是什么\| 2018.04.11 00:01:37 \| N?Iam获取错误无效长度参数传递到左或子字符串函数。您需要要在问题中添加更多示例数据,您显然有一些数据与您提供的单个示例不符。@MJH添加一个WHERE子句,该子句断言数据与您试图分析的模式匹配。@Tim Biegeleisen:我可以这样做,但我仍然不清楚OP试图实现什么,因为他们只提供了一份样本数据。
+---------------------------------------------------------------------------+--------------------------+-----------------------+
|                                    C1                                     |            C2            |          C3           |
+---------------------------------------------------------------------------+--------------------------+-----------------------+
| Test/ Elegant Conditions : TASK100: Elegant Item\|2018.04.11 00:01:37\|N  | Test/ Elegant Conditions | TASK100: Elegant Item |
+---------------------------------------------------------------------------+--------------------------+-----------------------+