0
votes

Query SQL Sélectionnez Intervalles de temps

J'essaie de sélectionner toutes les lignes d'une base de données SQL qui se trouvent entre un intervalle d'heure, pour chaque jour. La colonne DateTime s'appelle "DT" et a le format DateTime suivant: 2019-10-17 16:03:43

J'aimerais extraire toutes les lignes de cette table où la DT était comprise entre 22:00:00 et 02:00:00, pour tous les jours. xxx

où * devrait être n'importe où ...

Merci pour votre support! < P> Edit: J'ai oublié de mentionner: J'utilise l'interpréteur SQL intégré du navigateur DB pour SQLite


3 commentaires

Quels RDBM utilisez-vous? SQL Server, Oracle, MySQL ???


Quel DBMS Produit utilisez-vous? "SQL" n'est qu'une langue de requête, et non le nom d'un produit de base de données spécifique et des fonctions traitant de l'horodatage (date / heure) sont très spécifiques au fournisseur. Veuillez ajouter un tag pour le produit de base de données que vous utilisez postgreSQL , oracle , sql-serveur , db2 , ...


dB-navigateur-sqlite


5 Réponses :


0
votes

Vous devez extraire la partie temporelle de la date et comparer celle-ci dans la plage. Depuis minuit, entre 22 et 2, vous devrez la diviser en deux comparaisons, le temps compris entre 22 et 0 et entre 0 et 2.

Pour voir comment extraire le temps, jetez un coup d'œil à Cette question .


0 commentaires

-1
votes

Ceci fonctionnera ::

SELECT *
FROM MY_TABLE
WHERE strftime('%H','Dt')>22  
OR strftime('%H','Dt')<2 


7 commentaires

L'heure ne peut pas être supérieure à 22 et plus petite que 2 en même temps. Cette requête ne renverra rien


Je viens de tester monsieur Sir .. ça marche @a_horse_with_no_name imgur.com/a/vyugghen


Eh bien > 10 et <16 est quelque chose de complètement différent de > 22 et <2 essayez la requête de votre réponse, pas quelque chose de différent


Je teste avec heure actuelle .. Si je mets 22 et 2, cela donnera certainement 0 résultats. Cause Le temps actuel est 12 ici.


Le point est: un seul numéro ne peut pas être supérieur à 22 et inférieur à 2 en même temps et c'est ce que votre réponse suggère. Votre condition est équivalente à où 1 = 2 , voir un exemple ici: dbfiddle .uk / ...


Ouais je reçois ton point. Trouvera une autre solution. Merci pour la connaissance.


Dans SQLite, il n'y a pas de fonctions DateDiff, Daadd, Datamediff.



0
votes

avec postgres, en supposant dt est défini comme horsetamp Vous pouvez procéder comme suit: xxx

ou si vous souhaitez exclure les horodatages Sur précision 02:00:00 xxx


1 commentaires

Merci de votre aide. Votre proposition renvoie ce qui suit: Résultat: Jeton non reconnu: ":" A à la ligne 1: Sélectionnez * de MyTable où "DT"> = "DT"



0
votes
 select DT_time from (
    select cast (substr(to_char(Dt,'dd-mm-yyyy HH:MM:SS'),12,2) as integer ) as DT_time from MY_TABLE )
 where  DT_time between 2 and 22;

1 commentaires

Résultat: pas de ce type: to_char



0
votes

entre 22:00:00 et 02:00:00

signifie: xxx


0 commentaires