mostrar a data actual-1 na sybase

estou a tentar mostrar a Sybase de data do dia anterior, usando uma consulta seleccionada:

select dateadd(day,-1,convert(char(10), getdate(), 23))

Esta pesquisa mostra como 2015-06-18 00:00:00.0

espero que a saída seja 2015-06-18.

Como posso conseguir isso?

 0
Author: Nicholas Carey, 2015-06-20

4 answers

Tente seleccionar o dateadd (dia, - 1, convert(data, getdate(), 365))

 2
Author: Jayesh, 2015-10-30 22:03:41

Bem, {[3] } é um tipo binário. Como é formatado para exibição depende de você.

getdate() devolve um datetime que representa a data/hora actual. E dateadd() devolve um valor datetime ou date, dependendo do que começou (no seu caso, seria datetime). E quando executa a sua declaração select, está a ser convertida para um texto usando o formato predefinido configurado para a sua instância Sybase. Daí os seus resultados.

Resumindo, tu és:

  • Converter o valor datetime para char (10) para obter um texto de data do formato ISO 8601 (yyyy-mm-dd).
  • convertendo esse de volta para um valor datetime (de modo que o componente temporal é o início do dia)
  • Subtraindo um dia.

A maneira mais fácil de obter o que quer (data de ontem) é esta:

dateadd(day,-1, convert(date,getdate()) )

Que, quando formatado para visualização, irá sair como algo do género (dependendo do formato predefinido configurado para a sua instância Sybase) yyyy-mm-dd.

Ou pode sair como November 29, 2015. Se você quer garantir que é uma representação de data ISO 8601, você precisa ser explícito sobre isso e moldá-lo a char ou varchar, assim:

convert(char(10) , dateadd(day,-1, convert(date,getdate()) ) , 23 )
O que te deixa com um valor que contém a data de ontem.

Se a sua versão do Sybase não suportar date, terá de recuar para o que estava a fazer, mas algo assim:

convert(char(10) , dateadd(day,-1, getdate() ) , 23 )
 0
Author: Nicholas Carey, 2015-06-19 22:36:25

Estás a dizer para te dar HH:MM:ss, então é isso que estás a receber.

O 23 dentro do convert é o código de formato para yyyy-mm-ddTHH:mm:ss não há código para obter AAAA-mm-dd, o mais próximo que você pode obter é 105 (dd-mm-yy) ou 110 (mm-yy-dd).

Se precisar de AAAA-mm-dd, então terá de converter a data para uma cadeia de caracteres(char ou varchar), e truncar as partes que não deseja.

A Converter A Data

 0
Author: Michael Gardner, 2015-06-22 11:41:49

Tente seleccionar converter (char (10), dateadd(dia, - 1, getdate() ), 23 )

O Dateadd espera um parâmetro de data como terceiro argumento. No seu exemplo está a dar-lhe um char(10) . Mesmo que a conversão implícita do char - >DateTime seja suportada no Sybase, eu não codificaria para depender dele neste caso.

 0
Author: SmartDeveloper, 2017-02-15 19:43:17