@didxga: Attention: (end - start) ne renvoie PAS une seconde de différence entre les valeurs datetime. Il renvoie un nombre correspondant à la différence entre les nombres décimaux qui ressemblent à aaaammjjhhmmss.
helloPiers
Réponses:
330
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
Que signifie exactement «la différence en secondes par jour»? Je ne comprends pas pourquoi multiplier le résultat de TIMEDIFFpar 24*60*60n'est pas égal au résultat de TIMESTAMPDIFF.
David Tuite
Cette solution a fonctionné pour moi! Mais dans mon cas, j'aimerais jouer le TIMESTAMPDIFF en JOUR, mais sans tenir compte des week-ends (samedi / soleil). Je veux dire, seulement la différence des jours de la semaine ... Est-ce possible d'une manière simple? Sinon, je m'excuse pour la gêne occasionnée, alors je chercherai une autre solution. Les savoirs traditionnels.
Massa
8
TIMEDIFF dans l'exemple est incorrect car ce n'est pas le nombre de secondes entre ces deux jours. TIMEDIFF renvoie une valeur TIME, qui comprend les heures, les minutes et les secondes de la différence. Le multiplier ne donnera pas une réponse utile. Utilisez TIMESTAMPDIFF.
IvanD
4
Intéressant qui TIMEDIFF()s'attend à ce que les arguments d'heure de début et de fin soient dans l'ordre opposé à celui attendu par TIMESTAMPDIFF().
LS
1
Remarque: Lors de l'utilisation de la fonction TIMEDIFF, la valeur de l'heure peut être comprise entre "-838: 59: 59" et "838: 59: 59". w3schools.com/SQl/func_mysql_timediff.asp
cREcker
38
Si vous travaillez avec des colonnes DATE (ou pouvez les convertir en colonnes de date), essayez DATEDIFF (), puis multipliez par 24 heures, 60 min, 60 secondes (puisque DATEDIFF renvoie la différence en jours). Depuis MySQL:
cher, c'est parfait pour la question ci-dessus, mais je veux une modification avec la même requête, alors je pourrais s'il vous plaît m'aider à savoir comment y parvenir. ici, je veux comparer le résultat final avec ma valeur, comme SELECT * FROM table where datediff(today,databasedate) as days =3;quelque chose comme ça
Sooraj Abbasi
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 - une manière standard de chronométrer dans les systèmes de type Unix. Représente un entier 32 bits, indiquant le nombre de secondes écoulées depuis le 01/01/1970 00:00:00. Ie une limite inférieure. La limite supérieure est limitée à 2106 par an, mais en raison de programmes fréquents, elle ne fonctionne pas avec cette valeur (au lieu d'un entier non signé utilisant un entier signé) est considérée comme la limite supérieure en 2038.
Devid G
+ lorsque le passage à l'heure d'été est incorrectement déduit / ajouté
TC veut obtenir la valeur des résultats en secondes ou en millisecondes.
Devid G
0
Cette fonction prend la différence entre deux dates et l'affiche dans un format de date aaaa-mm-jj. Tout ce dont vous avez besoin est d'exécuter le code ci-dessous, puis d'utiliser la fonction. Après l'exécution, vous pouvez l'utiliser comme ceci
Ce code calcule la différence entre deux dates au format aaaa MM jj.
declare@StartDate datetime
declare@EndDate datetime
declare@years int
declare@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 int
select@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 int
select@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 +@Days
else@lastdayAsOnDate +@Days
end)printconvert(varchar,@years)+' year(s), '+convert(varchar,@months)+' month(s), '+convert(varchar,@days)+' day(s) '
Pourquoi ne pas simplement utiliser la TIMESTAMPDIFFfonction?
codeforester
0
Si vous avez une date stockée dans le champ de texte sous forme de chaîne, vous pouvez implémenter ce code, il récupérera la liste des derniers jours par semaine, un mois ou une année de tri:
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 est votre format de date
Cette requête affiche l'enregistrement entre les jours que vous avez définis comme suit: En dessous des 7 derniers jours et Au-dessus des 14 derniers jours, ce serait donc votre enregistrement de la semaine dernière à afficher le même concept que celui du mois ou de l'année. Quelle que soit la valeur que vous fournissez dans la date ci-dessous, comme: ci-dessous à partir de 7 jours, l'autre valeur serait donc le double de 14 jours. Ce que nous disons ici, récupérez tous les enregistrements ci-dessus des 14 derniers jours et inférieurs des 7 derniers jours. Il s'agit d'un enregistrement hebdomadaire dont vous pouvez changer la valeur en 30-60 jours pendant un mois et aussi pendant un an.
Attention: (fin - début) ne renvoie PAS une seconde de différence entre les valeurs de date / heure. Il renvoie un nombre correspondant à la différence entre les nombres décimaux qui ressemblent à aaaammjjhhmmss.
helloPiers
-1
Pourquoi pas juste
Sélectionnez Somme (Date1 - Date2) dans le tableau
Cela ne renvoie pas la différence de date en secondes, mais renvoie plutôt la différence entre les nombres décimaux qui ressemblent à aaaammjjhhmmss. Donc, cela ne résout pas la question d'OP. La même chose est également mentionnée dans le commentaire sur la question.
Réponses:
Ainsi, vous pouvez utiliser
TIMESTAMPDIFF
pour votre but.la source
TIMEDIFF
par24*60*60
n'est pas égal au résultat deTIMESTAMPDIFF
.TIMEDIFF()
s'attend à ce que les arguments d'heure de début et de fin soient dans l'ordre opposé à celui attendu parTIMESTAMPDIFF()
.Si vous travaillez avec des colonnes DATE (ou pouvez les convertir en colonnes de date), essayez DATEDIFF (), puis multipliez par 24 heures, 60 min, 60 secondes (puisque DATEDIFF renvoie la différence en jours). Depuis MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
par exemple:
la source
DATEDIFF
ne renvoie pas de fractions.Obtenez la différence de date en jours à l'aide de DATEDIFF
OU
Reportez-vous au lien ci-dessous MySql différence entre deux horodatages en jours?
la source
SELECT * FROM table where datediff(today,databasedate) as days =3;
quelque chose comme çala source
la source
Deuxième approche
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
la source
Ou, vous pouvez utiliser la fonction TIMEDIFF
la source
Cette fonction prend la différence entre deux dates et l'affiche dans un format de date aaaa-mm-jj. Tout ce dont vous avez besoin est d'exécuter le code ci-dessous, puis d'utiliser la fonction. Après l'exécution, vous pouvez l'utiliser comme ceci
la source
OK ce n'est pas tout à fait ce que l'OP a demandé, mais c'est ce que je voulais faire :-)
la source
Ce code calcule la différence entre deux dates au format aaaa MM jj.
la source
TIMESTAMPDIFF
fonction?Si vous avez une date stockée dans le champ de texte sous forme de chaîne, vous pouvez implémenter ce code, il récupérera la liste des derniers jours par semaine, un mois ou une année de tri:
% d% m% Y est votre format de date
Cette requête affiche l'enregistrement entre les jours que vous avez définis comme suit: En dessous des 7 derniers jours et Au-dessus des 14 derniers jours, ce serait donc votre enregistrement de la semaine dernière à afficher le même concept que celui du mois ou de l'année. Quelle que soit la valeur que vous fournissez dans la date ci-dessous, comme: ci-dessous à partir de 7 jours, l'autre valeur serait donc le double de 14 jours. Ce que nous disons ici, récupérez tous les enregistrements ci-dessus des 14 derniers jours et inférieurs des 7 derniers jours. Il s'agit d'un enregistrement hebdomadaire dont vous pouvez changer la valeur en 30-60 jours pendant un mois et aussi pendant un an.
Merci J'espère que cela aidera quelqu'un.
la source
Vous feriez simplement ceci:
la source
Pourquoi pas juste
Sélectionnez Somme (Date1 - Date2) dans le tableau
date1 et date2 sont datetime
la source