@didxga: Cuidado: (fim - início) NÃO retorna uma diferença de segundos entre os valores de data e hora. Retorna um número que é a diferença entre números decimais que se parecem com aaaammddhhmmss.
precisa saber é o seguinte
Respostas:
329
SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');-- result: 22:00:59, the difference in HH:MM:SS formatSELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');-- result: 79259 the difference in seconds
Então, você pode usar TIMESTAMPDIFFpara o seu propósito.
O que significa "a diferença em segundos por dias" exatamente? Não entendo por que multiplicar o resultado de TIMEDIFFpor 24*60*60não é igual ao resultado de TIMESTAMPDIFF.
David Tuite 22/10/2013
Esta solução funcionou para mim! Mas no meu caso, eu gostaria de executar o TIMESTAMPDIFF em DAY, mas sem considerar os fins de semana (sáb / dom). Quero dizer, apenas dias de semana de diferença ... É possível de uma maneira simples? Caso contrário, peço desculpas pelo inconveniente e procurarei outra solução. TKs.
Massa
8
TIMEDIFF no exemplo está incorreto, pois esse não é o número de segundos entre esses dois dias. TIMEDIFF retorna um valor TIME, que possui horas, minutos e segundos da diferença. Multiplicá-lo não produzirá uma resposta útil. Use TIMESTAMPDIFF.
IvanD
4
Interessante que TIMEDIFF()espera que os argumentos de hora inicial e final estejam na ordem oposta à esperada por TIMESTAMPDIFF().
Se você estiver trabalhando com colunas DATE (ou pode convertê-las como colunas de data), tente DATEDIFF () e multiplique por 24 horas, 60 minutos e 60 segundos (já que DATEDIFF retorna a diferença em dias). No MySQL:
querido, é perfeito para a pergunta acima, mas eu quero algumas modificações com a mesma consulta, por favor poderia me ajudar que como pode é conseguir isso. aqui eu quero comparar o resultado final com o meu valor, SELECT * FROM table where datediff(today,databasedate) as days =3;algo como isto
Sooraj Abbasi 16/06
9
SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
calculates difference in hour.(for days--> you have to define day replacing hourSELECT DATEDIFF('2012-2-2','2012-2-1')SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')
unix_timestamp - uma maneira padrão de temporização nos sistemas do tipo Unix. Representa um número inteiro de 32 bits, indicando quantos segundos se passaram desde 01/01/1970 00:00:00. Ou seja, um limite inferior. O limite superior é limitado a 2.106 por ano, mas, devido a programas freqüentes, não opera com esse valor (em vez de um número inteiro não assinado usando um número inteiro assinado) é considerado o limite superior em 2038.
Devid G
+ quando a passagem no horário de verão é deduzida / adicionada incorretamente #
O TC deseja obter o valor dos resultados em segundos ou milissegundos.
precisa saber é o seguinte
0
Essa função pega a diferença entre duas datas e a mostra em um formato de data aaaa-mm-dd. Tudo o que você precisa é executar o código abaixo e usar a função Após a execução, você pode usá-lo assim
Esse código calcula a diferença entre duas datas no formato dd MM / aaaa.
declare@StartDate datetime declare@EndDate datetimedeclare@years intdeclare@months int declare@days int--NOTE: date of birth must be smaller than As on date, --else it could produce wrong resultsset@StartDate ='2013-12-30'--birthdateset@EndDate = Getdate()--current datetime--calculate yearsselect@years = datediff(year,@StartDate,@EndDate)--calculate months if it's value is negative then it --indicates after __ months; __ years will be complete--To resolve this, we have taken a flag @MonthOverflow...declare@monthOverflow intselect@monthOverflow =casewhen datediff(month,@StartDate,@EndDate)-( datediff(year,@StartDate,@EndDate)*12)<0then-1else1end--decrease year by 1 if months are Overflowedselect@Years =casewhen@monthOverflow <0then@years-1 else@years endselect@months = datediff(month,@StartDate,@EndDate)-(@years *12)--as we do for month overflow criteria for days and hours --& minutes logic will followed same waydeclare@LastdayOfMonth intselect@LastdayOfMonth = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))select@days =casewhen@monthOverflow<0and
DAY(@StartDate)> DAY(@EndDate)then@LastdayOfMonth +(datepart(d,@EndDate)- datepart(d,@StartDate))-1else datepart(d,@EndDate)- datepart(d,@StartDate)endselect@Months=casewhen@days <0or DAY(@StartDate)> DAY(@EndDate)then@Months-1 else@Months endDeclare@lastdayAsOnDate int;set@lastdayAsOnDate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate),0)));Declare@lastdayBirthdate int;set@lastdayBirthdate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@StartDate)+1,0)));if(@Days <0)(select@Days =casewhen(@lastdayBirthdate >@lastdayAsOnDate)then@lastdayBirthdate +@Dayselse@lastdayAsOnDate +@Daysend)printconvert(varchar,@years)+' year(s), '+convert(varchar,@months)+' month(s), '+convert(varchar,@days)+' day(s) '
Por que não simplesmente usar a TIMESTAMPDIFFfunção?
codeforester 29/03
0
Se você tiver uma data armazenada no campo de texto como sequência, poderá implementar esse código, ele buscará a lista dos últimos dias da semana, um mês ou um ano:
SELECT*FROM`table`WHERE STR_TO_DATE(mydate,'%d/%m/%Y')< CURDATE()- INTERVAL 30 DAY AND STR_TO_DATE(date,'%d/%m/%Y')> CURDATE()- INTERVAL 60 DAY
//This isfor a month
SELECT*FROM`table`WHERE STR_TO_DATE(mydate,'%d/%m/%Y')< CURDATE()- INTERVAL 7 DAY AND STR_TO_DATE(date,'%d/%m/%Y')> CURDATE()- INTERVAL 14 DAY
//This isfor a week
% d% m% Y é o seu formato de data
Esta consulta exibe o registro entre os dias que você definiu lá: Abaixo dos últimos 7 dias e Acima dos últimos 14 dias, portanto, seria o seu registro da última semana exibir o mesmo conceito para mês ou ano. Qualquer que seja o valor que você esteja fornecendo na data abaixo, como: abaixo de 7 dias, o outro valor seria o dobro de 14 dias. O que estamos dizendo aqui obtém todos os registros acima dos últimos 14 dias e abaixo dos últimos 7 dias. Este é um registro da semana em que você pode alterar o valor para 30 a 60 dias por um mês e também por um ano.
Cuidado: (fim - início) NÃO retorna uma diferença de segundos entre os valores de data e hora. Retorna um número que é a diferença entre números decimais que se parecem com aaaammddhhmmss.
Isso não retorna a diferença de data em segundos; em vez disso, retorna a diferença entre números decimais que se parecem com aaaammddhhmmss. Portanto, isso não resolve a questão do OP. O mesmo é mencionado no comentário sobre a questão.
Respostas:
Então, você pode usar
TIMESTAMPDIFF
para o seu propósito.fonte
TIMEDIFF
por24*60*60
não é igual ao resultado deTIMESTAMPDIFF
.TIMEDIFF()
espera que os argumentos de hora inicial e final estejam na ordem oposta à esperada porTIMESTAMPDIFF()
.Se você estiver trabalhando com colunas DATE (ou pode convertê-las como colunas de data), tente DATEDIFF () e multiplique por 24 horas, 60 minutos e 60 segundos (já que DATEDIFF retorna a diferença em dias). No MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
por exemplo:
fonte
DATEDIFF
não retorna frações.Obter a diferença de data em dias usando DATEDIFF
OU
Consulte a diferença MySql no link abaixo entre dois registros de data e hora em dias?
fonte
SELECT * FROM table where datediff(today,databasedate) as days =3;
algo como istofonte
fonte
Segunda abordagem
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
fonte
Ou você pode usar a função TIMEDIFF
fonte
Essa função pega a diferença entre duas datas e a mostra em um formato de data aaaa-mm-dd. Tudo o que você precisa é executar o código abaixo e usar a função Após a execução, você pode usá-lo assim
fonte
OK, não é bem o que o OP pediu, mas é o que eu queria fazer :-)
fonte
Esse código calcula a diferença entre duas datas no formato dd MM / aaaa.
fonte
TIMESTAMPDIFF
função?Se você tiver uma data armazenada no campo de texto como sequência, poderá implementar esse código, ele buscará a lista dos últimos dias da semana, um mês ou um ano:
% d% m% Y é o seu formato de data
Esta consulta exibe o registro entre os dias que você definiu lá: Abaixo dos últimos 7 dias e Acima dos últimos 14 dias, portanto, seria o seu registro da última semana exibir o mesmo conceito para mês ou ano. Qualquer que seja o valor que você esteja fornecendo na data abaixo, como: abaixo de 7 dias, o outro valor seria o dobro de 14 dias. O que estamos dizendo aqui obtém todos os registros acima dos últimos 14 dias e abaixo dos últimos 7 dias. Este é um registro da semana em que você pode alterar o valor para 30 a 60 dias por um mês e também por um ano.
Obrigado Espero que ajude alguém.
fonte
Você simplesmente faria isso:
fonte
Por que não apenas
Selecione Soma (Data1 - Data2) da tabela
date1 e date2 são datetime
fonte