7
votes

MySQL Sélectionnez: Où (heure) = entre la tablevalue et la tablevalue

Je cherche un moyen de sélectionner la ligne dans laquelle l'heure actuelle est entre deux valeurs définies dans la ligne. J'ai mis en place une table avec 3 colonnes, 2 d'entre eux tiennent une horodatage (HH: MM: SS), l'autre une chaîne. Y a-t-il une manière que je puisse obtenir la chaîne correspondant à l'heure actuelle? Pour le mettre de manière plus abstraite:

Sélectionnez la chaîne du nom de table où (heure actuelle) entre (valeur d'heure limite inférieure) et (valeur temporelle supérieure);

texte alt

Donc, fondamentalement, basé sur l'heure actuelle, mon script devrait émettre la chaîne correcte.

Comment puis-je aller à ce sujet? Merci!


2 commentaires

Quel type est le inférieur_limit et upper_limit ?


Votre nuit s'étend-elle sur deux jours? entre '22: 00: 00 'et '05: 00: 00' ne retournerait probablement pas ce que vous attendez.


4 Réponses :


2
votes

La façon dont vous avez fait est à peu près:

SELECT String FROM TableName WHERE CURTIME() BETWEEN (Lower Limit Time Value) AND (Upper Limit Time Value);


2 commentaires

Les crochets sont-ils également corrects dans MySQL? Je ne connais pas la syntaxe et j'utilise actuellement quelque chose (citations normales 'ne semble pas fonctionner) dans mes requêtes via PHP.


Non. Les backtsticks (`) sont corrects pour délimiter les noms de colonne non standard. c'est à dire.



5
votes

dans mysql code>, l'horodatage est un mot tout à fait déroutant.

s'ils sont inférieurlimit code> et Upprimimit code> sont Time Code> Colonnes de 00:00:00 Code> à 23:59:59 CODE>: P>

SELECT  String
FROM    TableName
WHERE   CURTIME() BETWEEN lowerlimit AND upperlimit
        OR CURTIME() BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit
        OR SUBTIME(CURTIME(), '24:00:00') BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit


4 commentaires

Fait la même erreur au début. Maintenant () Contient également la date de la date. Curtime () devrait être utilisé. Downvote pas de moi.


?? Je ne sais pas ce que vous demandez. Quoi qu'il en soit, votre réponse correspond à la question beaucoup mieux que d'autres.


Merci, il semble fonctionner lorsque je suppose que je suppose le ou la partie, si je ne le laissez pas tout après que le "lowerlimit" est retourné. De plus, je n'ai pas de transitions de minuit de la limite «inférieure» à la «majuscule». :] Vous devriez savoir que je sais que je connais très peu à MySQL, voudriez-vous expliquer la dernière partie?


@Chris: entre est dirigé, donc 2 entre 3 et 1 est true mais 2 entre 3 et 1 est faux . Dans mysql , le temps peut être négatif, donc si vous avez une transition de minuit (à partir de 22:00 à 01:00 ) il le convertira en entre '-02: 00' et '01: 00 '



4
votes
SELECT string_col
FROM your_table
WHERE CURTIME() BETWEEN lower_limit_col AND upper_limit_col

0 commentaires

2
votes

Le type des deux colonnes doit être temporel (et non horodatage). Ensuite, la réponse est dans votre question:

select string from tablename where curtime() between lowerlimit and upperlimit


1 commentaires

Ah, je n'ai pas ces transitions heureusement, merci pour la tête de la tête!