none
dúvidas numa stored procedure RRS feed

  • Pergunta

  • Será que alguém pode tirar algumas dúvidas que tenho numa stored procedure ?

    Muito obrigado !!!


    oliverjer10@hotmail.com

    Preciso pegar a hora de um campo datetime e o minuto, tem a procedure abaixo que faz isso.
    Mas por exemplo preciso adicionar um zero quando o minuto for menor que 10.
    Porque ele apresenta assim 17:8.

    Não sei colocar if e nem como alterar a procedure.

    colega não sei se eu consigui deixar claro, tenho um pouco de dificuldade para colocar as ideias aqui.


    grato.

    a  storad procedure é essa aqui:


    -- Copiar os dados do inner join da tabela folha e folhacompleta
    -- e joga os dados na tabela folhaimp que servirá de base para
    -- gerar o lay-out do relatorio da folha de ponto.
    --08/12/2008 foi mudado o inner e está sendo feito pelo arquivo cadastro e o arquivo folha e não mais pelo folhacompleta.
    --OBS: Utiliza Tabela Cadastro e o Folha


    CREATE PROCEDURE Gera_folha_imp_indiv
    @data_abre datetime,
    @data_fecha datetime,
    @matri int

    AS

    INSERT INTO Folha..folhaimp
    (nome,matricula,secretaria,carga_ho,secao,provimento,cargo,admissao,inicio01,fim01,inicio02,seq,cad.fim02,data,ano,descricao, entrada01,saida02,obs,mes)

    select nome,cad.matricula,cad.secretaria, cad.carga_ho, cad.secao, cad.provimento,cad.cargo,CAST(DAY(CAD.ADMISSAO) AS CHAR(2))+'/'+CAST(MONTH(CAD.ADMISSAO) AS CHAR(2))
    +'/'+CAST(YEAR(CAD.ADMISSAO) AS CHAR(4)),cad.inicio01,cad.fim01,cad.inicio02,999999 as seq,cad.fim02,
    folha.data,folha.ano,folha.descricao, CAST(DATEPART(hour,folha.ENTRADA01) AS CHAR(2))+':'+CAST(DATEPART(MINUTE,folha.ENTRADA01)AS CHAR(2)),
    CAST(DATEPART(hour,folha.saida02) AS CHAR(2))+':'+CAST(DATEPART(MINUTE,folha.saida02)AS CHAR(2)),folha.obs, folha.mes as mes from folha..cadastro as cad inner join folha..folha as folha
    on cad.matricula = folha.matricula where cad.matricula = @matri and folha.data >= @data_abre and folha.data <= @data_fecha and cad.status = 1 order by cad.nome
    GO

    grato.

    • Editado oliverjer10 terça-feira, 14 de abril de 2009 19:57
    terça-feira, 14 de abril de 2009 19:43

Respostas

  • Boa Tarde,

    O DATEPART é uma opção, mas acredito que na sua situação seja muito trabalhoso utilizá-lo. Opte pelo CONVERT.

    DECLARE @DATA DATETIME
    SET @DATA = GETDATE()
    
    -- Uso do DATEPART
    SELECT RIGHT('0' + CAST(DATEPART(HH,@DATA) AS VARCHAR(2)),2) + ':' +
    	RIGHT('0' + CAST(DATEPART(MI,@DATA) AS VARCHAR(2)), 2) + ':' +
    	RIGHT('0' + CAST(DATEPART(SS,@DATA) AS VARCHAR(2)), 2)
    
    -- Uso do CONVERT
    SELECT CONVERT(CHAR(10),@DATA,108)

    Agora cabe uma pequena análise. Se você trafegar o DATETIME direto para aplicação temos:

    - 8 bytes trafegados por registro (só a coluna DATETIME)
    - Processamento X
    - Memória X
    - Tráfego de Rede X

    Para um dado formatado temos

    - 10 bytes de dados trafegados por registro (só a coluna formatada)
    - Mais processamento para montar a coluna (superior a processamento X)
    - Mais memória para armazenar os dados (superior a memória X)
    - Mais dados para trafegar na rede (superior ao tráfego X)

    Arquiteturalmente falando (ainda que venha a ser imperceptível), não é recomendado que você faça essa formatação no banco de dados.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como realizar cálculos com horas no SQL Server – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!532.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Alex Rosa terça-feira, 14 de abril de 2009 22:52
    • Marcado como Resposta oliverjer10 quinta-feira, 16 de abril de 2009 11:44
    terça-feira, 14 de abril de 2009 20:09

Todas as Respostas

  • Pode postar sua dúvida.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 19:43
  • Boa Tarde,

    O DATEPART é uma opção, mas acredito que na sua situação seja muito trabalhoso utilizá-lo. Opte pelo CONVERT.

    DECLARE @DATA DATETIME
    SET @DATA = GETDATE()
    
    -- Uso do DATEPART
    SELECT RIGHT('0' + CAST(DATEPART(HH,@DATA) AS VARCHAR(2)),2) + ':' +
    	RIGHT('0' + CAST(DATEPART(MI,@DATA) AS VARCHAR(2)), 2) + ':' +
    	RIGHT('0' + CAST(DATEPART(SS,@DATA) AS VARCHAR(2)), 2)
    
    -- Uso do CONVERT
    SELECT CONVERT(CHAR(10),@DATA,108)

    Agora cabe uma pequena análise. Se você trafegar o DATETIME direto para aplicação temos:

    - 8 bytes trafegados por registro (só a coluna DATETIME)
    - Processamento X
    - Memória X
    - Tráfego de Rede X

    Para um dado formatado temos

    - 10 bytes de dados trafegados por registro (só a coluna formatada)
    - Mais processamento para montar a coluna (superior a processamento X)
    - Mais memória para armazenar os dados (superior a memória X)
    - Mais dados para trafegar na rede (superior ao tráfego X)

    Arquiteturalmente falando (ainda que venha a ser imperceptível), não é recomendado que você faça essa formatação no banco de dados.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como realizar cálculos com horas no SQL Server – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!532.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Alex Rosa terça-feira, 14 de abril de 2009 22:52
    • Marcado como Resposta oliverjer10 quinta-feira, 16 de abril de 2009 11:44
    terça-feira, 14 de abril de 2009 20:09
  • Bom dia a todos,


    Muito obrigado Gustavo Maia Aguiar e Gilberto Neto pelo atenção,
    e com profissionais como vcs que a gente consegue aprender mais.
    Muito Obrigado.

    abs.
     

    oliverjer10@hotmail.com
    quinta-feira, 16 de abril de 2009 11:49