我在表格中的列中有这种类型的数据,
QCIM1J77477, 4650125572, QCCR1J77891, 4650312729, QCCR1J74974 --- remove without comma
或
QCIM1E107498,QCIM1E109835,4650092399/ QCCR1E91190, -- remove 4650092399
我只想要从QC开始的那个字符串,除了QC之外, 所以请告诉我怎样才能实现呢?
答案 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