Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过sql从字符串中拆分字符串_Sql - Fatal编程技术网

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

通过sql从字符串中拆分字符串,sql,Sql,我在表中的一列中有这种类型的数据 QCIM1J77477, 4650125572, QCCR1J77891, 4650312729, QCCR1J74974 --- remove without comma 或 我只想要那个从QC开始的字符串,除去QC, 因此,请告诉我如何实现它?在一段t-sql脚本下面,该脚本创建了一个带有临时变量的临时表。在这里,临时表一直存在直到您中断会话,临时变量在脚本执行期间存在。我在底部有一个drop table语句。弄清楚您想用表数据做什么,以及是否想把数据放在

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

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

我只想要那个从QC开始的字符串,除去QC,
因此,请告诉我如何实现它?

在一段
t-sql
脚本下面,该脚本创建了一个带有临时变量的临时表。在这里,临时表一直存在直到您中断会话,临时变量在脚本执行期间存在。我在底部有一个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”的起始位置,使用
SUBSTRING
可以告诉dbms从找到的起始位置返回(此处)12个字符

在结果的下面。QCsNew是您想要的结果

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

你试过什么吗?提到您使用的是哪种DBMS?Oracle,MySql?替换什么东西。。。(特定于产品!)我没有特殊的值..您能在不使用regexp函数/数据库的情况下编写该查询吗???请!除非你想把它做成平面文件!请发布所需的输出,但在任何情况下,我们都有这种类型的值:QCIM1E107498,QCIM1E109835465009399/QCCR1E91190,而不是它不工作的f9,…这里的输出将是QCIM1E107498,QCIM1E109835,QCCR1E91190,我认为在脚本的后半部分添加子字符串就可以了,它的作用类似于:搜索QC值并从中给出x个字符数。我可以稍后再给你写,或者明天再写。@vipin singhal:我对脚本做了一个补充。这将有助于你在问题中给出的可能性。使用PATINDEX,您可以找到字符串“QC”的起始位置,使用SUBSTRING,您可以告诉dbms从找到的起始位置返回12个字符。PS:您可以添加dbms的标签(SQL Server?),并在列表中添加所需的结果,以更清楚地显示您想要的结果。
QCs                      StartPosition      QCsNew
QCIM1E107498             1                  QCIM1E107498
QCIM1E109835             1                  QCIM1E109835
4650092399/ QCCR1E91190 13                  QCCR1E91190