Usuário com melhor resposta
Select com Smalldatetime

Pergunta
-
Respostas
-
Daniel,
Esse caso pode ser uma regra de negócio e talvez não possa ser mudado. O que acontece que no momento da inclusão do registtro deve ser passado um GETDATE() para esse campo. Sendo assim entra data e hora. Então para que a hora não fosse registrado teria que rever o insert. E como disse antes teria que ver se isso é um requisito do sistema ou não. O que vc pode fazer é usar para burlar isso, e o que recomento seria os exemplos que todos colocaram.
Ou poderia tb usar a mesma formatação que está usando na variável no campo. Sendo assim estariam iguais e a hora seria igonoarada. Abaixo o exemplo para conferência.
select
convert(varchar(10),DtEnvio,103) from chequepresentewhere
convert(varchar(8),DtEnvio,112) = '20071218'Espero ter ajudado,
Abraço,
chapolin.rio@gmail.,com
Todas as Respostas
-
-
Oi Amigo;
Você quer apenas fazer um select no campo do tipo Smalldatetime, ou você quer que este campo seja listado de com alguma formatação especifica?
Caso queira somente um select simples basta fazer o seguinte:select
seu_campo_datafrom
sua_tabelaQue dará o seguinte resultado:
2006-01-30 09:41:00
2006-01-30 09:41:00
2006-01-30 09:41:00Caso queira com alguma formatação você pode fazer o seguinte:
select
convert(varchar,seu_campo_data,3)from
sua_tabelaQue dará o seguinte resultado:
30/01/06
30/01/06
30/01/06Neste caso para alterar o formato mude o 3º parametro da função convert para o que atender sua necessidade.
Caso não seja isto que você deseje fazer nos explique mais detalhadamente a sua situação para podermos ajuda-lo.
[]sPaulo Jr.
-
Boa Tarde dralves,
Bem, não entendi o que queres realmente. Acredito que deva ser um campo datetime para um smalldatetime. Se for isso mesmo, basta usar o convet na data que é datetime para tirar a hora dela, já que a small datetime não possuei hora.
Abaixo alguns convert's para conhecimento com seus resultados ao lado.
SELECT
CONVERT(VARCHAR,GETDATE(),112) 20071218SELECT
CONVERT(VARCHAR,GETDATE(),101) 12/18/2007SELECT
CONVERT(VARCHAR,GETDATE(),111) 2007/12/18SELECT
CONVERT(VARCHAR,GETDATE(),102) 2007.12.18SELECT
CONVERT(VARCHAR,GETDATE(),103) 18/12/2007SELECT
CONVERT(VARCHAR,GETDATE(),104) 18.12.2007Espero ter ajudado.
Abraço,
-
Amigo, você quer fazer um Select no campo?
Buscando informações dentro de um intervalo é isso?
Tipo:
Select data From dbo.Teste
where data between '01/01/2007' and '31/12/2007' seria isso?
Se for isso é simples, vc precisa tratar os dados do campo com cast ou convert formatando o retorno, se quiser pode buscar dados dentro do campo tipo pegar somente o ano com a função datepart com outras como year(), month(), day e por aí vai.
Entendeu?
Se precisar de mais alguma ajuda, retorne.
Abraços,
-
-
Boa Tarde,
Vi sua dúvida na outra comunidade e postei uma solução. Dê uma olhada:
-- Selecionar todos os registros do dia 18
SET
DATEFORMAT YMDSELECT
<Campos> FROM TabelaWHERE
Data >= '2007-12-18 00:00:00.000' And Data <= '2007-12-18 23:59:59.999'[ ]s,
Gustavo
-
CORRIGINDO: SMALLDATETIME MOSTRA ATÉ OS SEGUNDOS DA HORA SEGUNDOS.
BEM NESSE SEU CASO O SELECT SERIA DESSA FORMA:
select convert(varchar,DtEnvio,3) from chequepresente
where DtEnvio = '20071218'Esse é o padrão do SQL,Caso queira colocar outro tipo de data, caso não me engane teria que converter também o campo data. Nesse caso só será necessario a conversão da variável de data.
-
Essa é a mensagem de erro que está dando.
Desde já agradeço pela ajuda.
select convert(varchar,DtEnvio,103) from chequepresente
where DtEnvio = 20071218Server: Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type smalldatetime. -
-
-
-
Dralves,
Esta mensagem de erro esta alertando, para um erro aritmético de conversão de uma expressão data em smalldatetime, sendo que você esta tentando converter um campo data para VarChar, mas não especificou o tamanho deste varchar.
Veja abaixo se este exemplo pode te ajudar:
select convert(varchar(10),DtEnvio,103) from chequepresente
where DtEnvio = 20071218 -
Boa Tarde,
Se você registrar a hora em seu campo SMALLDATETIME, a construção = '20071218' não irá funcionar. A razão é bem simples:
'20071218' = '20071218 00:00:00' <> '2001218 Qualquer Horário'.
Dessa forma, os registros '20071218 16:00' e '20071218 17:00' são diferentes de '20071218'.
Outra questão é que o formato YMD deve ser explicitado para evitar problemas. Por isso sugeri da seguinte forma:
SET
DATEFORMAT YMDSELECT
<Campos> FROM TabelaWHERE
Data >= '2007-12-18 00:00:00.000' And Data <= '2007-12-18 23:59:59.999'Formate o campo Data no SELECT se preferir, mas deixe o WHERE conforme recomendado.
[ ]s,
Gustavo
-
Bem,
Não está dando mais erro.. Já resolvemos isso. Agora não está retornando resultado. Verifique se realmente tem resultado para esse where. Ou seja, se existe dt_envio com a data de hoje. Se preferir de um select comum e pegue uma data que tenha no banco. Sendo assim não tem como ela não retornar ao menos um registro. Depois disso se não retornar pode ser alguma conversão na data. Isso aí resolvemos depois.
-
Ainda continua com erro agora é outro.
select convert(varchar(10),DtEnvio,103) from chequepresente
where DtEnvio = 20071218Server: Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type smalldatetime. -
-
-
-
Segue o select conforme solicitado
NumBar Cod DtEnvio s r t y
003346 {2602C1E1-9843-487F-A81B-1F8967996D96} 18/12/2007 16:48:00 1 1 2 30
003347 {2602C1E1-9843-487F-A81B-1F8967996D96} 18/12/2007 16:48:00 1 1 2 0
003349 {2602C1E1-9843-487F-A81B-1F8967996D96} 18/12/2007 16:48:00 1 1 2 0
003350 {2602C1E1-9843-487F-A81B-1F8967996D96} 18/12/2007 16:48:00 1 1 2 0 -
Daniel,
Esse caso pode ser uma regra de negócio e talvez não possa ser mudado. O que acontece que no momento da inclusão do registtro deve ser passado um GETDATE() para esse campo. Sendo assim entra data e hora. Então para que a hora não fosse registrado teria que rever o insert. E como disse antes teria que ver se isso é um requisito do sistema ou não. O que vc pode fazer é usar para burlar isso, e o que recomento seria os exemplos que todos colocaram.
Ou poderia tb usar a mesma formatação que está usando na variável no campo. Sendo assim estariam iguais e a hora seria igonoarada. Abaixo o exemplo para conferência.
select
convert(varchar(10),DtEnvio,103) from chequepresentewhere
convert(varchar(8),DtEnvio,112) = '20071218'Espero ter ajudado,
Abraço,
chapolin.rio@gmail.,com
-
-
-
Daniel,
Obrrigado pelo retorno.
Sobre suas dúvida, vc teria que na parte do seu insert usar um convert para exluir a hora, Basta na variável do insert correspondente a esse campo basta usar o mesmo convert 112. Esse é o padrão. Quando for incluído no banco não dará problema nenhuma, e o campo de hora terá sempre valor ZERADO (00:00:00). Sendo assim não teria mais o problema da data. MAs volto a comentar que isso tem relação direta com requisito do sistema. Verificar se essa mudança é válida e não afetará outros processos..
Abraço
-
-
Bom dia Daniel,
Desculpe-me a demora mas ontem tive uma reuinião que continuou hoje. Qualquer dúvida vc pode postar aqui ou abrir um outro fórum. de qualquer forma terá minha ajuda e a dos colegas. O que pode acontecer, é que como a resposta já esta marcada como respondida algumas pessoas não vão entrar e assim ficarás sem outra opção na maneira de desenvolver. Isso aí fica a seu critério.
Qualquer parada posta que ajudamos.
Abraço,
chapolin.rio@gmail.com