none
Select com Smalldatetime RRS feed

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 chequepresente

    where convert(varchar(8),DtEnvio,112) = '20071218'

     

    Espero ter ajudado,

     

    Abraço,

    chapolin.rio@gmail.,com

    terça-feira, 18 de dezembro de 2007 19:14

Todas as Respostas

  •  

    Olá Daniel!!!

     

     

    Tem como explicar melhor sua dúvida??

     

     

     

    Abraço

    terça-feira, 18 de dezembro de 2007 18:09
  • 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_data

    from sua_tabela

     

    Que dará o seguinte resultado:

     

    2006-01-30 09:41:00
    2006-01-30 09:41:00
    2006-01-30 09:41:00

    Caso queira com alguma formatação você pode fazer o seguinte:

    select convert(varchar,seu_campo_data,3)

    from sua_tabela

     

    Que dará o seguinte resultado:


    30/01/06
    30/01/06
    30/01/06

     

    Neste 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.


    []s

     

    Paulo Jr.

    terça-feira, 18 de dezembro de 2007 18:12
  • 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) 20071218

    SELECT CONVERT(VARCHAR,GETDATE(),101) 12/18/2007

    SELECT CONVERT(VARCHAR,GETDATE(),111) 2007/12/18

    SELECT CONVERT(VARCHAR,GETDATE(),102) 2007.12.18

    SELECT CONVERT(VARCHAR,GETDATE(),103) 18/12/2007

    SELECT CONVERT(VARCHAR,GETDATE(),104) 18.12.2007

     

     

         Espero ter ajudado.

     

    Abraço,

     

    chapolin.rio@gmail.com

    terça-feira, 18 de dezembro de 2007 18:12
  • 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,

    terça-feira, 18 de dezembro de 2007 18:17
  • Blz entendi, mas como faço com a condição ele não me retorna valor algum?

     

    select convert(varchar,DtEnvio,3) from chequepresente
    where DtEnvio = 18/12/2007
    terça-feira, 18 de dezembro de 2007 18:22
  • 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 YMD

    SELECT <Campos> FROM Tabela

    WHERE Data >= '2007-12-18 00:00:00.000' And Data <= '2007-12-18 23:59:59.999'

     

    [ ]s,

     

    Gustavo

    terça-feira, 18 de dezembro de 2007 18:24
  • 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.

     

     

    terça-feira, 18 de dezembro de 2007 18:28
  • Essa é a mensagem de erro que está dando.

     

    Desde já agradeço pela ajuda.

     

    select convert(varchar,DtEnvio,103) from chequepresente
    where DtEnvio = 20071218

     

    Server: Msg 8115, Level 16, State 2, Line 1
    Arithmetic overflow error converting expression to data type smalldatetime.

     

    terça-feira, 18 de dezembro de 2007 18:43
  • Dralves

     

    Você deve colocar a data com os separadores e entre parenteses, tente ai para ver se resolve seu problema.

     

    select convert(varchar,DtEnvio,103) from chequepresente
    where DtEnvio = '2007-12-18'

     

    []s

     

    Paulo Jr.

    terça-feira, 18 de dezembro de 2007 18:46
  • Coloca entre plick's '20071218'

    terça-feira, 18 de dezembro de 2007 18:49
  •  

    Não resolveu ainda continua vindo em branco o resulto.
    terça-feira, 18 de dezembro de 2007 18:51
  • 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

    terça-feira, 18 de dezembro de 2007 18:52
  • 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 YMD

    SELECT <Campos> FROM Tabela

    WHERE 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

    terça-feira, 18 de dezembro de 2007 18:55
  • 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.

    terça-feira, 18 de dezembro de 2007 18:56
  • Ainda continua com erro agora é outro.

     

    select convert(varchar(10),DtEnvio,103) from chequepresente
    where DtEnvio = 20071218

     

    Server: Msg 8115, Level 16, State 2, Line 1
    Arithmetic overflow error converting expression to data type smalldatetime.

     

    terça-feira, 18 de dezembro de 2007 18:58
  • AMIGO,

     

    Faça um select do banco sem where, um top 10 e posta aqui para nós fazendo o favor, para ajudarmos melhor

    terça-feira, 18 de dezembro de 2007 19:02
  • Olá,

     

    E se você tentasse:

     

    select convert(char(10),DtEnvio,103) from chequepresente

    where DtEnvio >= '2007-12-18 00:00:00.000' And DtEnvio <= '2007-12-18 23:59:59.999'

     

    [ ]s,

     

    Gustavo

    terça-feira, 18 de dezembro de 2007 19:02
  • Como faço para não registrar a hora no meu campo DtEnvio?

     

    terça-feira, 18 de dezembro de 2007 19:07
  • 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
    terça-feira, 18 de dezembro de 2007 19:10
  • 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 chequepresente

    where convert(varchar(8),DtEnvio,112) = '20071218'

     

    Espero ter ajudado,

     

    Abraço,

    chapolin.rio@gmail.,com

    terça-feira, 18 de dezembro de 2007 19:14
  • Amigos,

     

    obrigado pela ajuda.

     

    Para não perder o habito, o Chapolin falou no insert dessa data.

     

    Como faço para inserir sem a Hora?

     

    terça-feira, 18 de dezembro de 2007 19:20
  • Olá,

     

    Tente o seguinte:

     

    SET DATEFORMAT YMD

    INSERT INTO chequepresente (DtEnvio) VALUES ('2007-12-18')

    INSERT INTO chequepresente (DtEnvio) VALUES (CONVERT(SMALLDATETIME,'2007-12-18',103))

     

    [ ]s,

     

    Gustavo

    terça-feira, 18 de dezembro de 2007 19:23
  • 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

    terça-feira, 18 de dezembro de 2007 19:25
  • Fica tanquilo quem meche também no sistema sou eu.

     

    Aqui eu sou o DBA e Desenvolvedor..rsrsrs

     

    Se não conseguir posso postar aqui mesmo ou vc aconcelha abrir um novo post?

     

    terça-feira, 18 de dezembro de 2007 19:30
  • 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

    quarta-feira, 19 de dezembro de 2007 12:59