通过sql从字符串中拆分字符串

时间:2015-09-07 12:23:35

标签: sql

我在表格中的列中有这种类型的数据,

QCIM1J77477, 4650125572, QCCR1J77891, 4650312729, QCCR1J74974 --- remove without comma

QCIM1E107498,QCIM1E109835,4650092399/ QCCR1E91190,  -- remove 4650092399

我只想要从QC开始的那个字符串,除了QC之外, 所以请告诉我怎样才能实现呢?

1 个答案:

答案 0 :(得分:1)

t-sql脚本下面创建一个带有临时变量的临时表#t。这里临时表存在,直到您中断会话,在执行脚本期间存在临时变量。我在底部有一个drop table语句。找出你想要的表数据,以及你是否希望将数据放在其他地方,例如在非临时表中。)。

我假设你想要包含' QC'的所有字符串片段。作为单独的价值观。如果您希望数据恢复原来的状态,即每列多个字符串,那么您也可以按技巧进行分组。那么你确实需要某种类型的唯一标识符,例如名称,id,每行或标识的guid。

create table #t ([QCs] nvarchar(100))

declare @str    nvarchar(500)
set @str = 'QCIM1E107498,QCIM1E109835,4650092399/ QCCR1E91190'
--replace the above temporary variable with the column you are selecting

declare @sql nvarchar(4000)
select @sql = 'insert into #t select '''+ replace(@str,',',''' union all select ''') + ''''
print @sql

exec ( @sql )

select
QCs
,PATINDEX('%QC%',QCs) as StartPosition
,SUBSTRING(QCs,PATINDEX('%QC%',QCs),12) as QCsNew
from #t where QCs like '%QC%'

drop table #t

使用PATINDEX,您可以找到字符串中的位置' QC&#39}启动,并使用SUBSTRING告诉dbms从找到的StartPosition开始返回(此处)12个字符。

结果如下。 QCsNew是您想要的结果。

QCs                      StartPosition      QCsNew
QCIM1E107498             1                  QCIM1E107498
QCIM1E109835             1                  QCIM1E109835
4650092399/ QCCR1E91190 13                  QCCR1E91190