none
Como extrair apenas os valores que estão entre aspas no mesmo campo depois gravá-los em outra tabela separados por cada campo RRS feed

  • Pergunta

  • Boa tarde, Pessoal"

    Sou iniciante em SQL, em uma tabela do nosso BD tempos um campo que possui o registro com as informações do paciente concatenado com uma serie de valores que não precisamos.

    Como eu faço, para montar uma select para extrair desse registro apenas o que está entre aspas?

    O meu registro está assim:

    a:28:{i:18;s:13:"Sérgio silva";i:19;s:11:"1199900001";i:20;s:0:"n/i";i:21;s:0:"n/i";i:23;s:15:"Amil One Health";i:24;s:0:"n/i";i:27;s:0:"n/i";i:31;s:1:"2";i:32;s:0:"n/i";i:33;s:1:"2";i:34;s:0:;}

    Eu preciso dele assim:

    "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";

    Observação, esses monte de valores a:28: ...etc... eles mudam, não são valores fixos, se fossem até usaria o replace, mas são vários valores.

    Depois que eu chegar nessa mineração: "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";

    Como eu faço para alocar cada valor em campo campo qualquer, pode ser uma tabela temporária, tipo assim:

    |nome           |campo 1        |Campo 2 |Campo 3 |Campo 4               |Campo  5 | .....

    |Sérgio silva|1199900001|n/i              |n/i              |Amil One Health|n/i               |n/i|2|n/i|2| .....

    Muito obrigado amigos

    sexta-feira, 5 de fevereiro de 2021 00:54

Todas as Respostas

  • RP Neto,

    Estes valores que estão delimitados entre aspas, possuem posição fixa?

    Podemos pensar no uso das funções SubString(), CharIndex() e PadIndex().

    O passo inicial é ter este entendimento se os dados estão sempre na mesma posição.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 5 de fevereiro de 2021 11:10
  • Bom dia,

    RP Neto, segue uma sugestão para testes utilizando XML:

    select 
        ca.CampoXML.value('(/p/x)[1]', 'varchar(80)') as Nome,
        ca.CampoXML.value('(/p/x)[2]', 'varchar(50)') as Campo2,
        ca.CampoXML.value('(/p/x)[3]', 'varchar(10)') as Campo3,
        ca.CampoXML.value('(/p/x)[4]', 'varchar(10)') as Campo4,
        ca.CampoXML.value('(/p/x)[5]', 'varchar(80)') as Campo5,
        ca.CampoXML.value('(/p/x)[6]', 'varchar(10)') as Campo6,
        ca.CampoXML.value('(/p/x)[7]', 'varchar(10)') as Campo7,
        ca.CampoXML.value('(/p/x)[8]', 'varchar(10)') as Campo8,
        ca.CampoXML.value('(/p/x)[9]', 'varchar(10)') as Campo9,
        ca.CampoXML.value('(/p/x)[10]', 'varchar(10)') as Campo10
    from Tabela
    cross apply 
    (
        select cast('<p>' + 
                    replace(replace(Campo, ':"', ':<x>'), '";', '</x>;') + 
                    '</p>' as xml) as CampoXML
    ) as ca
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 5 de fevereiro de 2021 13:45