我在SQL表中有一个列,其中包含格式为:
的字符串Provider - Category: General: Entry (1)
我想创建一个SQL语句,将其拆分为4列,得到如下结果:
Column1 | Column2 | Column3 | Column4
----------------------------------------------
Provider | Category | General: Entry | 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作为解决方法。