none
Converter datetime em float RRS feed

  • Pergunta

  • Boa tarde!

    Preciso de uma ajuda para para converter uma coluna que esta em Common.TDatetime para FLOAT e armazenar em uma variável

    declare @temp FLOAT

     select @temp = CONVERT(FLOAT,EndDateTime)
       from tabela1 where id=1

    Mas o código acima esta retornando o seguinte erro: Explicit conversion from data type datetimeoffset to float is not allowed.

    Alguém teria uma ideia?

    Obrigado.

     
    segunda-feira, 29 de outubro de 2012 19:49

Respostas

  • Muito pouco provável que você precise converter um campo data apenas para adicionar um número, nessa espécie de timeout. A data/hora já fica armazenada como um número, então não teria muita lógica convertê-la explicitamente para float para somar a algum número. Normalmente utiliza-se a função dateadd para isso, salvo algum particularidade, que ate agora não me pareceu ser o caso.

    Se isso não resolver sua questão, por favor, forneça maiores detalhes sobre a mesma.

    Exemplos:

    Declare @Data DateTime = '2012-10-29 18:41:34'
    
    Select
      Data = @Data,
      DataMaisDezSegundos = DateAdd(SECOND, 10, @Data),
      DataMaisDezMinutos  = DateAdd(MINUTE, 10, @Data),
      DataMaisDezHoras    = DateAdd(HOUR, 10, @Data),
      DataMaisDezDias     = DateAdd(DAY, 10, @Data),
      DataMaisDezMeses    = DateAdd(MONTH, 10, @Data),
      DataMaisDezAnos     = DateAdd(YEAR, 10, @Data)


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta JPJUNIOR terça-feira, 30 de outubro de 2012 12:07
    segunda-feira, 29 de outubro de 2012 21:51
    Moderador

Todas as Respostas

  • só para entender, por que converter um formato de data para float ? voce quer converter uma data em numero ? pode passar um exemplo de uma data e como voce quer que fique ?

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 29 de outubro de 2012 20:16
  • Boa tarde,

    Eu também não sei qual é a finalidade, nem sem você vai obter o resultado desejado, mas experimente fazer a conversão para DateTime antes de converter para Float.

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 29 de outubro de 2012 20:22
  • É uma situação para controle de produto em produção. Converto essa data em float e somo com outro valor (como se fosse um timeout) que também esta em float. Então comparo esse resultado com outra data para decidir o que o sistema deve fazer...
    segunda-feira, 29 de outubro de 2012 20:24
  • Veja se é mais ou menos isto que voce quer, voce não consegue converter de primeira para float por que na data teria - ou /:

    create table #temp (coluna date)
    
    insert into #temp
    values (GETDATE()),(GETDATE() - 1),(GETDATE() +1)
    
    select CAST(cast(replace(coluna,'-','') as varchar(20)) as float) from #temp


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 29 de outubro de 2012 20:29
  • Eu tenho um coluna com as seguintes características:  

    Nome: DataInicio;  Data Type: TDatetime;  Lenght: 10

    Quando faço o seguinte comando obtenho a seguinte resposta:

    select DataInicio from tabela1 where id=1

    2012-10-29 18:41:34.6589383 -02:00

    Eu gostaria de converter essa data em float para inserir em uma variável float. Alexandre, valeu pela dica, mas infelizmente não funcionou. Retornou o seguinte erro: Error converting data type varchar to float

    segunda-feira, 29 de outubro de 2012 20:47
  • Não sei se é a melhor maneira, mas tente assim:

    Declare @variavel float
    set @variavel = (select CAST(cast(replace(replace(replace('2012-10-29 18:41:34.6589383 -02:00','-',''),':',''),' ','') as varchar(20)) as float))
    select @variavel


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 29 de outubro de 2012 20:51
  • Experimente mais ou menos desta forma:

    select cast(Cast(DataInicio as DateTime) as Float)

    ou

    select cast(cast(SWITCHOFFSET(DataInicio, '+00:00') as DateTime) as Float)

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 29 de outubro de 2012 21:01
  • Muito pouco provável que você precise converter um campo data apenas para adicionar um número, nessa espécie de timeout. A data/hora já fica armazenada como um número, então não teria muita lógica convertê-la explicitamente para float para somar a algum número. Normalmente utiliza-se a função dateadd para isso, salvo algum particularidade, que ate agora não me pareceu ser o caso.

    Se isso não resolver sua questão, por favor, forneça maiores detalhes sobre a mesma.

    Exemplos:

    Declare @Data DateTime = '2012-10-29 18:41:34'
    
    Select
      Data = @Data,
      DataMaisDezSegundos = DateAdd(SECOND, 10, @Data),
      DataMaisDezMinutos  = DateAdd(MINUTE, 10, @Data),
      DataMaisDezHoras    = DateAdd(HOUR, 10, @Data),
      DataMaisDezDias     = DateAdd(DAY, 10, @Data),
      DataMaisDezMeses    = DateAdd(MONTH, 10, @Data),
      DataMaisDezAnos     = DateAdd(YEAR, 10, @Data)


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta JPJUNIOR terça-feira, 30 de outubro de 2012 12:07
    segunda-feira, 29 de outubro de 2012 21:51
    Moderador
  • Pessoal, obrigado pela ajuda.

    Só para explicar melhor, tenho uma coluna datetime para marcar a date e hora de inicio. E uma coluna float com contem os segundos de timeout.

    Precisava somar o timeout (que estava em float) com a data de inicio para saber o tempo máximo que o produto tinha para entrar na linha. 

    E depois que ele entrasse, eu verificava se o tempo real de entrada foi superior ao teórico (resultado da soma anterior).

    E caso fosse inferior, eu tinha que atualizar a coluna timeout com os segundos reais que ele demorou para entrar.

    O primeiro select do gapimex funcionou.

    Porém eu desconhecia as funções apresentadas pelo Roberson, que tornou o trabalho mais facil. Fiz a soma com o "DateAdd" e depois calculei a diferença com a função datediff ( datediff(second, @NextDataInicio, @LastDataInicio )

    Agora vou continuar com resto do trabalho.

    Mais uma vez, muito obrigado pela ajuda de todos.

    terça-feira, 30 de outubro de 2012 12:11