SQL按分隔符拆分字符串
我在SQL表中有一列,其中包含以下格式的字符串:SQL按分隔符拆分字符串,sql,Sql,我在SQL表中有一列,其中包含以下格式的字符串: Provider - Category: General: Entry (1) 我想创建一个SQL语句,将其拆分为4列,结果如下: Column1 | Column2 | Column3 | Column4 ---------------------------------------------- Provider | Category | General: Entry | 1 它需要按-,然后按第一个:,然后按(,最后删
Provider - Category: General: Entry (1)
我想创建一个SQL语句,将其拆分为4列,结果如下:
Column1 | Column2 | Column3 | Column4
----------------------------------------------
Provider | Category | General: Entry | 1
它需要按-
,然后按第一个:
,然后按(
,最后删除)
进行拆分
如何创建类似的内容?如果数据具有相同的结构,则此查询应该可以工作:
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)
。但是,您可以将这两种解决方案与@文本(不象“%HD%”)和@文本(象“%HD%”)结合起来,然后使用UNION ALL作为解决方法。您使用的是哪种数据库管理系统?数据是否总是相同的?或者他们可以改变?如果标点符号可能会改变或不改变。使用SQL 2012,我注意到有时数据中可能会有另一组括号,在General:Entry(HD)(1)
中,如果它们是相同的,看起来很好,但对于类似Provider-Category:General:Entry(HD)(1)
的内容,有时会发生,将在最后一列中放置HD而不是1,其中第3列应为General:Entry(HD)
。有没有办法将最后一个子字符串改为lastIndexOf”(“?请参阅更新的答案。这有多重要?”(HD)?我认为这些查询可以为您提供实现任务的基本方法。