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
.
4 answers
Tente seleccionar o dateadd (dia, - 1, convert(data, getdate(), 365))
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 )
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.
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.