Usuário com melhor resposta
dúvidas numa stored procedure

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 intAS
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
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.comComo 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
Todas as 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.comComo 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
-