none
Extrair parte de um texto em um Campo do tipo CLOB RRS feed

  • Pergunta

  • Srs.

    Tenho um campo de uma tabela cujo datatye é CLOB, no qual esse campo armazena uma série de perguntas e respostas que são feitas aos clientes da empresa através do Sistema. (As perguntas E respostas armazenadas no mesmo campo). 

    Quando essas informações são armazenadas na Tabela não existe um delimitador que separe o que é pergunta do que é resposta, mas pelo sistema eu sei onde termina uma pergunta e onde começa outra (EXEMPLO: O que está entre a primeira pergunta e a segunda pergunta é a resposta da primeira pergunta).

    Existe uma forma de extrair essas respostas?? 

    Tabela: Solicitação

    Campo A: ID_car (Number)
    Campo B: Resumo (CLOB)

    ------------------------------

    ID_car      Resumo 
    SOL001    Stop Car? yesDanger? No Type? BibolColor? blue
    SOL002    Stop Car? NoDanger? yes Type? variasColor? Yellow
    SOL003    Stop Car? yesDanger? No Type? SinopseColor? green


    Preciso extrair as respostas da pergunta 'Type?',ou seja, tudo o que está entre Type? e Color?

    ISSO É POSSÍVEL??

    quarta-feira, 23 de outubro de 2013 23:40

Respostas

  • Olá Lucia,

    Segue exemplo para seu cenário:


    declare @table table (strRes text )
    
    insert into @table (strRes) values ('Stop Car? yesDanger? No Type? BibolColor? blue')
    insert into @table (strRes) values ('Stop Car? NoDanger? yes Type? variasColor? Yellow')
    insert into @table (strRes) values ('Stop Car? yesDanger? No Type? SinopseColor? green')
    
    select  cast(strRes as nvarchar(max)) -- coluna convertido
    		, CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 ) -- posicao inicial
    		, CHARINDEX( 'Color? ', cast(strRes as nvarchar(max)), 0 ) -- posicao final
    		, substring(
    						cast(strRes as nvarchar(max)), CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 )+6,  
    						CHARINDEX( 'Color? ', cast(strRes as nvarchar(max)), 0 ) - CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 )-6
    					)  -- retorno
    from @table

    "Se a resposta foi útil, não esqueça de marcar a resposta."

    Roberto Galvão 
    MCITP - Administration SQL Server 2008
    MCITP - Developer SQL Server 2008 
    MCSA - SQL Server 2012 
    MCT - SQL Server 
    Blog: http://bobgalvao.wordpress.com


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    • Editado Roberto Galvão quinta-feira, 24 de outubro de 2013 00:41
    • Sugerido como Resposta Roberto Galvão quinta-feira, 24 de outubro de 2013 17:09
    • Marcado como Resposta LuciaFi quinta-feira, 24 de outubro de 2013 23:06
    quinta-feira, 24 de outubro de 2013 00:38

Todas as Respostas

  • Olá Lucia,

    Segue exemplo para seu cenário:


    declare @table table (strRes text )
    
    insert into @table (strRes) values ('Stop Car? yesDanger? No Type? BibolColor? blue')
    insert into @table (strRes) values ('Stop Car? NoDanger? yes Type? variasColor? Yellow')
    insert into @table (strRes) values ('Stop Car? yesDanger? No Type? SinopseColor? green')
    
    select  cast(strRes as nvarchar(max)) -- coluna convertido
    		, CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 ) -- posicao inicial
    		, CHARINDEX( 'Color? ', cast(strRes as nvarchar(max)), 0 ) -- posicao final
    		, substring(
    						cast(strRes as nvarchar(max)), CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 )+6,  
    						CHARINDEX( 'Color? ', cast(strRes as nvarchar(max)), 0 ) - CHARINDEX( 'Type? ', cast(strRes as nvarchar(max)), 0 )-6
    					)  -- retorno
    from @table

    "Se a resposta foi útil, não esqueça de marcar a resposta."

    Roberto Galvão 
    MCITP - Administration SQL Server 2008
    MCITP - Developer SQL Server 2008 
    MCSA - SQL Server 2012 
    MCT - SQL Server 
    Blog: http://bobgalvao.wordpress.com


    Roberto Galvão | MCTS | MCITP | Microsoft Partner |


    • Editado Roberto Galvão quinta-feira, 24 de outubro de 2013 00:41
    • Sugerido como Resposta Roberto Galvão quinta-feira, 24 de outubro de 2013 17:09
    • Marcado como Resposta LuciaFi quinta-feira, 24 de outubro de 2013 23:06
    quinta-feira, 24 de outubro de 2013 00:38
  • Perfeito

    Eu havia pesquisado sobre a função REGEXP_SUBSTR.

    Não conhecia a função charindex. 

    A sintaxe do REGEXP_SUBSTR parece ser simples, mas é mega complexo. Por acaso consigo fazer a mesma coisa que vc fez, mas usando o REGEXP_SUBSTR.

    Grato

    quinta-feira, 24 de outubro de 2013 23:06