SQL通过分隔符拆分字符串

时间:2014-07-01 09:30:59

标签: sql

我在SQL表中有一个列,其中包含格式为:

的字符串
Provider - Category: General: Entry (1)

我想创建一个SQL语句,将其拆分为4列,得到如下结果:

Column1  | Column2  | Column3        | Column4
----------------------------------------------
Provider | Category | General: Entry | 1

需要按-分割,然后按第一个:进行分割,然后按(进行分割,最后删除)

如何创造类似的东西?

1 个答案:

答案 0 :(得分:2)

如果数据具有相同的结构,则此查询应该起作用:

DECLARE @TEXT VARCHAR(255) = 'Provider - Category: General: Entry (1)';

SELECT SUBSTRING(@TEXT,1,CHARINDEX('-',@TEXT)-1) AS COL1
,SUBSTRING(@TEXT,CHARINDEX('-',@TEXT)+2,CHARINDEX(':',@text)- 2 - CHARINDEX('-',@text))  AS COL2
,SUBSTRING(@TEXT,CHARINDEX(':',@TEXT)+2,CHARINDEX('(',@TEXT)- 2 - CHARINDEX(':',@TEXT)) AS COL3
,SUBSTRING(@TEXT,CHARINDEX('(',@TEXT)+1,CHARINDEX(')',@TEXT)- 1 - CHARINDEX('(',@TEXT)) AS COL4

输出:

Col1        Col2        Col3             Col4
Provider    Category    General: Entry      1

根据评论进行编辑:

DECLARE @TEXT VARCHAR(255) = 'Provider - Category: General: Entry (HD) (1)';

SELECT SUBSTRING(@TEXT,1,CHARINDEX('-',@TEXT)-1) AS COL1
,SUBSTRING(@TEXT,CHARINDEX('-',@TEXT)+2,CHARINDEX(':',@text)- 2 - CHARINDEX('-',@text))  AS COL2
,SUBSTRING(@TEXT,CHARINDEX(':',@TEXT)+2,CHARINDEX('(',@TEXT)- 2 - CHARINDEX(':',@TEXT)) AS COL3
--,SUBSTRING(@TEXT,CHARINDEX('(',@TEXT)+1,CHARINDEX(')',@TEXT)- 1 - CHARINDEX('(',@TEXT)) AS COL4
,REVERSE(SUBSTRING(REVERSE(@TEXT),2,CHARINDEX('(',(REVERSE(@TEXT))) - CHARINDEX(')',REVERSE(@TEXT))-1)) as COL4

有了这个,无论你是'Provider - Category: General: Entry (HD) (1)'还是'Provider - Category: General: Entry (HD) (1)',输出都是无论如何:

Col1        Col2        Col3             Col4
Provider    Category    General: Entry      1

它唯一不包含(HD)。但是,您可以将这两个解决方案与@TEXT NOT LIKE '%HD%'@TEXT LIKE '%HD%'结合使用,然后使用UNION ALL作为解决方法。