Convertir des heures en timestamp UNIX à la volé en SQL

Pour réaliser une recherche sur un champ de durée

Le problème exposé dans ce sujet a été résolu.

Bonjour bonjour les amis :)

Petite question, car ma recherche Google ne m’a rien donné de concluant, donc je vous demande, qui sait ? :)

Donc voilà, j’ai ma table "videos" avec le champs "duree".

Dans le champ "duree", c’est : 2h20min; 1h30min; 40min; etc.

Je souhaite savoir si il est possible, via une requete SQL, de réaliser une recherche style :

CHERCHER une video dont la duree est entre 20min et 40min

Mais je ne sais pas trop comment l’écrire.

Si quelqu’un a une idée, je suis preneur =)

Cordialement

+0 -0

Ton champ durée est un champ texte ? Si c’est le cas, alors c’est ça le problème. Ça devrait soit être un champ numérique, avec la durée en minutes (ou secondes, soyons fous), soit un objet quelconque qui représente une durée.

Je pense que tu devrais te faire un script pour retraduire tes durées en valeur numérique.

+2 -0

C’est faisable, mais le fait de représenter les durées avec du texte n’est pas la façon la plus simple et performante de les gérer par la suite.

Ça va dépendre de la BDD que tu utilises. Si tu utilises PostgreSQL, tu as de la chance car il sera capable de parser et de comprendre correctement le format 2h20min que tu sembles utiliser, par exemple :

=> select '2h20min'::interval;
 interval 
----------
 02:20:00
(1 row)

À partir de là, il suffit d’ajouter deux clauses WHERE pour obtenir les vidéos ayant une longueur comprise entre d1d_1 et d2d_2 :

select * from `videos`
where
    durée >= '30min'::interval and
    durée <= '2h40min'::interval
;

Tu peux aussi utiliser une seule clause BETWEEN pour plus de lisibilité :

select * from `videos`
where
    durée between '30min'::interval and '2h40min'::interval
;

Attention à ne pas comparer les chaînes de caractères directement entre elles, car l’ordre lexicographique ne marchera pas dans ton cas.

Si tu peux changer le schéma de ta DB, je te suggère d’utiliser un type interval (ou équivalent) ou un type integer pour représenter et filtrer plus simplement et efficacement sur les durées des vidéos.

P.S. : Je ne suis pas sûr de comprendre le rapport entre le titre du topic, Convertir des heures en timestamp UNIX à la volé en SQL, et le problème que tu nous présentes.

+5 -0

Mon SGBD est MySQL, désolé je ne l’avais pas mentioné.

Je vais suivre le conseil de Moté, je vais repassé toutes les données en secondes, et ça sera beaucoup plus simple à manipuler, et je pourrai faire une autre chose que je souhaitai faire depuis quelques temps ^^ je n’y avais pas pensé.

Merci à vous !

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte