Si les enregistrements sont stockés en tant que DATETIME, cela sélectionnera tous les enregistrements de la date précédente, sans tenir compte de la partie de temps. A été exécutée à 23:59:59, la requête renverra tous les enregistrements des dernières 48heures, non 24.
Quassnoi
18
Si vous souhaitez sélectionner les dernières 24 heures dans un champ datetime, remplacez «curate ()» par «now ()». Cela comprend également le temps.
Haentz
564
Dans MySQL:
SELECT*FROM mytable
WHERE record_date >= NOW()- INTERVAL 1 DAY
Dans SQL Server:
SELECT*FROM mytable
WHERE record_date >= DATEADD(day,-1, GETDATE())
Dans Oracle:
SELECT*FROM mytable
WHERE record_date >= SYSDATE -1
Dans PostgreSQL:
SELECT*FROM mytable
WHERE record_date >= NOW()-'1 day'::INTERVAL
Dans Redshift:
SELECT*FROM mytable
WHERE record_date >= GETDATE()-'1 day'::INTERVAL
Dans SQLite:
SELECT*FROM mytable
WHERE record_date >= datetime('now','-1 day')
J'essaye la requête pour mysql mais si son 2AM, par exemple, j'obtiens les enregistrements de 00 - 02 AM. Deux heures seulement au lieu de 24. Des idées?
Manos
J'aime beaucoup la solution fournie ici, juste ce que j'ai noté dans MySQL est que les performances de la solution Guillaume Flandre étaient plus rapides.
oneworld
1
Dans Amazon Redshift, je reçois function getdate() does not exist. Remplacé par current_dateet cela a bien fonctionné.
FloatingRock
1
Cette réponse me fait souhaiter qu'il y ait un bouton "étoile" car je veux ajouter ceci à mes favoris.
Brian Risk
1
@Manos Dans MySQL, il semble CURDATE()ne pas renvoyer une date avec une portion d'heure, donc ça va à 00. Je l'ai corrigé en utilisant NOW()au lieu de CURDATE().
4castle
21
MySQL:
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
L'INTERVALLE peut être en ANNÉE, MOIS, JOUR, HEURE, MINUTE, SECONDE
Par exemple, dans les 10 dernières minutes
SELECT*FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
C'est la réponse qui répond le mieux à la question spécifique: Comment retourner les 24 HEURES PRÉCÉDENTES (à partir du moment présent), par opposition aux 24 précédentes (qui suggère tous les résultats de la veille). Cela a répondu à mes exigences, cela obtient mon vote favorable. EDIT: il vaut la peine de mentionner la colonne table_name.the_date doit être un horodatage.
Anthony Cregan
8
Quel SQL n'a pas été spécifié, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Si vous êtes sur les types de date de précision augmentée 2008, utilisez plutôt la nouvelle fonction sysdatetime (), de la même manière si vous utilisez les heures UTC en interne pour les appels UTC.
Si l'horodatage considéré est un horodatage UNIX Vous devez d'abord convertir l'horodatage UNIX (par exemple, 1462567865) en horodatage ou données mysql
Cela suppose que le moteur utilisé est MySQL car FROM_UNIXTIME () est une fonction MySQL. Pour l'utilisation de SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Si vous avez besoin d'une précision à la milliseconde dans SQL Server 2016 et une utilisation ultérieure: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
C'est le seul qui a fonctionné pour moi sur mySQL. Pour une raison quelconque, lorsque j'ai essayé SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); J'étais toujours en train d'obtenir des records du 2018-06-14.
jDub9
1
SELECT*FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
pourquoi auriez-vous besoin d'ajouter "et order_date <= GETDATE ()" alors que vous recherchez déjà les dernières 24 heures au moment de l'exécution de cette requête? Cela n'a vraiment aucun sens d'avoir cette partie dans la clause where alors que "GETDATE" est déjà mentionné dans la première. Vous feriez mieux de le faire "order_date> = DateAdd (DAY, -1, GETDATE ())" c'est tout!
Réponses:
la source
DATETIME
, cela sélectionnera tous les enregistrements de la date précédente, sans tenir compte de la partie de temps. A été exécutée à23:59:59
, la requête renverra tous les enregistrements des dernières48
heures, non24
.Dans
MySQL
:Dans
SQL Server
:Dans
Oracle
:Dans
PostgreSQL
:Dans
Redshift
:Dans
SQLite
:Dans
MS Access
:la source
function getdate() does not exist
. Remplacé parcurrent_date
et cela a bien fonctionné.CURDATE()
ne pas renvoyer une date avec une portion d'heure, donc ça va à00
. Je l'ai corrigé en utilisantNOW()
au lieu deCURDATE()
.MySQL:
L'INTERVALLE peut être en ANNÉE, MOIS, JOUR, HEURE, MINUTE, SECONDE
Par exemple, dans les 10 dernières minutes
la source
Quel SQL n'a pas été spécifié, SQL 2005/2008
Si vous êtes sur les types de date de précision augmentée 2008, utilisez plutôt la nouvelle fonction sysdatetime (), de la même manière si vous utilisez les heures UTC en interne pour les appels UTC.
la source
dans postgres, en supposant que votre type de champ est un horodatage:
la source
Si l'horodatage considéré est un horodatage UNIX Vous devez d'abord convertir l'horodatage UNIX (par exemple, 1462567865) en horodatage ou données mysql
la source
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
Si vous avez besoin d'une précision à la milliseconde dans SQL Server 2016 et une utilisation ultérieure:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
la source
Bonjour, j'ai maintenant passé beaucoup de temps depuis le message d'origine, mais j'ai eu un problème similaire et je veux partager.
J'ai un champ datetime avec ce format AAAA-MM-JJ hh: mm: ss, et je veux accéder à une journée entière, voici donc ma solution.
La fonction DATE (), dans MySQL: extrait la partie date d'une expression date ou datetime.
avec cela, j'obtiens tout le registre de ligne en ce jour.
J'espère que cela aidera n'importe qui.
la source
la source
Dans SQL Server (pour les dernières 24 heures):
la source