none
Consulta Substring RRS feed

  • Pergunta

  • Pessoal, preciso fazer uma consulta que me retorne parte de um campo.

    ........<dhRecbto>2012-05-21T09:31:24</dhRecbto>......

    Preciso retornar a data e o horário desse texto, porém não existe nenhuma forma de verificar quantos caracteres tem antes, porque é variável, somente as tags iniciais e finais (<dhRecbto> e </dhRecbto> ). Tem como fazer isso ?

    Desde já agradeço.


    Gregorio

    segunda-feira, 21 de maio de 2012 19:58

Respostas

  • Gregorio, boa tarde,

    Sabemos que a posição inicial é o próximo caractere após a tag "<dhRecbto>", também sabemos que o tamanho da data e o horário é 19 posições.

    Segue um exemplo:

    CREATE TABLE #Teste(
    Texto	VARCHAR(100))
    
    INSERT INTO #Teste (Texto) VALUES 
    ('.......<dhRecbto>2012-05-21T09:31:24</dhRecbto>......'),
    ('...........<dhRecbto>2012-05-21T09:31:24</dhRecbto>.........'),
    ('....<dhRecbto>2012-05-21T09:31:24</dhRecbto>.........')
    
    SELECT SUBSTRING(Texto,CHARINDEX('<dhRecbto>',Texto)+LEN('<dhRecbto>'),19) FROM #Teste

    A função CHARINDEX pesquisa uma expressão e retorna sua posição inicial, se for localizada.

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    segunda-feira, 21 de maio de 2012 20:36
  • declare @text varchar(8000), @InicialString as int, @finalString as int
    
    set @InicialString = LEN('<dhRecbto>')
    set @finalString = LEN('/<dhRecbto>')
    
    set @text = '..234823948239fsdfjdske3409......<dhRecbto>2012-05-21T09:31:24</dhRecbto>...vfdghjr0938dwefsdhfjkds...'
    
    select SUBSTRING(
    		@text,charindex('<dhRecbto>' ,@text)+@InicialString,
    		(LEN(@text)- CHARINDEX('</dhRecbto>',@text)-@InicialString - @finalString)+1 ) 


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 21 de maio de 2012 20:39

Todas as Respostas

  • Gregorio, boa tarde,

    Sabemos que a posição inicial é o próximo caractere após a tag "<dhRecbto>", também sabemos que o tamanho da data e o horário é 19 posições.

    Segue um exemplo:

    CREATE TABLE #Teste(
    Texto	VARCHAR(100))
    
    INSERT INTO #Teste (Texto) VALUES 
    ('.......<dhRecbto>2012-05-21T09:31:24</dhRecbto>......'),
    ('...........<dhRecbto>2012-05-21T09:31:24</dhRecbto>.........'),
    ('....<dhRecbto>2012-05-21T09:31:24</dhRecbto>.........')
    
    SELECT SUBSTRING(Texto,CHARINDEX('<dhRecbto>',Texto)+LEN('<dhRecbto>'),19) FROM #Teste

    A função CHARINDEX pesquisa uma expressão e retorna sua posição inicial, se for localizada.

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    segunda-feira, 21 de maio de 2012 20:36
  • declare @text varchar(8000), @InicialString as int, @finalString as int
    
    set @InicialString = LEN('<dhRecbto>')
    set @finalString = LEN('/<dhRecbto>')
    
    set @text = '..234823948239fsdfjdske3409......<dhRecbto>2012-05-21T09:31:24</dhRecbto>...vfdghjr0938dwefsdhfjkds...'
    
    select SUBSTRING(
    		@text,charindex('<dhRecbto>' ,@text)+@InicialString,
    		(LEN(@text)- CHARINDEX('</dhRecbto>',@text)-@InicialString - @finalString)+1 ) 


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 21 de maio de 2012 20:39
  • Gregorio,

          Se isso é um XML é melhor você trabalhar com as ferramentas de XML do SQL Server...

          Veja um exemplo retirado do Books Online:

    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    SET @doc ='
    <ROOT>
    <Customers CustomerID="VINET" ContactName="Paul Henriot">
       <Orders CustomerID="VINET" EmployeeID="5" OrderDate=
               "1996-07-04T00:00:00">
          <Order_x0020_Details OrderID="10248" ProductID="11" Quantity="12"/>
          <Order_x0020_Details OrderID="10248" ProductID="42" Quantity="10"/>
       </Orders>
    </Customers>
    <Customers CustomerID="LILAS" ContactName="Carlos Gonzlez">
       <Orders CustomerID="LILAS" EmployeeID="3" OrderDate=
               "1996-08-16T00:00:00">
          <Order_x0020_Details OrderID="10283" ProductID="72" Quantity="3"/>
       </Orders>
    </Customers>
    </ROOT>'
    --Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- SELECT statement that uses the OPENXML rowset provider.
    SELECT    *
    FROM       OPENXML (@idoc, '/ROOT/Customers')
    EXEC sp_xml_removedocument @idoc

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    segunda-feira, 21 de maio de 2012 20:41
    Moderador