none
Verificação de Caracteres RRS feed

  • Pergunta

  • Boa tarde, 

    Pessoal estou com um dúvida sobre um caso, veja se podem ajudar-me, é o seguinte.

    Possuo uma base onde tenho projetos com várias tarefas, as tarefas possuem níveis, existe uma tabela com dados dos projetos e outra com dados das tarefas até ai tudo bem trazer os dados das duas coisa mas preciso mostrar mas ou menos com a estrutura:
    NOME PROJETO - TAREFA NIVEL 01- TAREFA NIVEL 02 - TAREFA NIVEL 03 e por ai vai
    Tem um campo na tabela de tarefas que armazena o nivel da da seguinte forma

    pIdProjeto.tIdTarefa01.tIdTarefa02.tIdTarefa03.tIdTarefa04
    é tipo a estrutura hierárquica... Como percorrer este campo e identificar os nome pelos códigos? 

    Não sei se fui claro o caso é complicado 
    terça-feira, 12 de junho de 2018 19:02

Respostas

  • O que voce tem que fazer é um split do valor pIdProjeto.tIdTarefa01.tIdTarefa02.tIdTarefa03.tIdTarefa04 usando "ponto" como caractere delimitador.

    se voce usa o Sql server 2016, a funçao é STRING_SPLIT senao voce vai ter que adicionar uma user function:

    CREATE FUNCTION SplitString
    (    
          @Input NVARCHAR(MAX),
          @Character CHAR(1)
    )
    RETURNS @Output TABLE (
          Item NVARCHAR(1000)
    )
    AS
    BEGIN
          DECLARE @StartIndex INT, @EndIndex INT
     
          SET @StartIndex = 1
          IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
          BEGIN
                SET @Input = @Input + @Character
          END
     
          WHILE CHARINDEX(@Character, @Input) > 0
          BEGIN
                SET @EndIndex = CHARINDEX(@Character, @Input)
               
                INSERT INTO @Output(Item)
                SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
               
                SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
          END
     
          RETURN
    END
    GO

    agora é só fazer um split no valor pIdProjeto.tIdTarefa01.tIdTarefa02.tIdTarefa03.tIdTarefa04 e usar a tabela resultante para fazer um join com a tabela de nivel.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 12 de junho de 2018 19:35

Todas as Respostas

  • O que voce tem que fazer é um split do valor pIdProjeto.tIdTarefa01.tIdTarefa02.tIdTarefa03.tIdTarefa04 usando "ponto" como caractere delimitador.

    se voce usa o Sql server 2016, a funçao é STRING_SPLIT senao voce vai ter que adicionar uma user function:

    CREATE FUNCTION SplitString
    (    
          @Input NVARCHAR(MAX),
          @Character CHAR(1)
    )
    RETURNS @Output TABLE (
          Item NVARCHAR(1000)
    )
    AS
    BEGIN
          DECLARE @StartIndex INT, @EndIndex INT
     
          SET @StartIndex = 1
          IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
          BEGIN
                SET @Input = @Input + @Character
          END
     
          WHILE CHARINDEX(@Character, @Input) > 0
          BEGIN
                SET @EndIndex = CHARINDEX(@Character, @Input)
               
                INSERT INTO @Output(Item)
                SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
               
                SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
          END
     
          RETURN
    END
    GO

    agora é só fazer um split no valor pIdProjeto.tIdTarefa01.tIdTarefa02.tIdTarefa03.tIdTarefa04 e usar a tabela resultante para fazer um join com a tabela de nivel.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 12 de junho de 2018 19:35
  • Obrigado!! Ajudou muito
    quarta-feira, 13 de junho de 2018 13:00