TO_INT [SQL] - Programmation
Marsh Posté le 19-07-2001 à 12:01:45
sql*server ne sait pas comparer des chaînes de caractères ? les bras m'en tombent ; j'a du mal à croire que c'est possible.
quel msg d'erreur tu as lorsque tu compares des chaînes ?
Remarque accessoire : c'est mieux d'utilser un type datetime ou date pour stocker des dates.
Marsh Posté le 19-07-2001 à 12:11:02
Pas de message d'erreur mais quand j'execute une recherche sur une période entre le 20010703 (3 juillet 2001) et le 20010713 (13 juillet 2001) et bien il me ramènes des enregistrements du 17,18 etc
Et j'ai pas dit que SQL*Server ne savait pas comparer les chaines de caractères (ou je me suis mal exprimé peux-etre).
Mais dans ce cas précis je fais :
WHERE s_date > 20010703 AND s_date < 20010713
Il me compare en mode caractères, résultat il me ramènes n'apporte quoi car il n'arrive pas comprendre que s_date > 20010703
Tu comprends ce ke je veux dire ?
Marsh Posté le 19-07-2001 à 12:13:20
Et pour ce ki est du Format Date/Time, impossible, c une norme de notre intranet pour un truc bien précis, je sais plus trop koi...
Marsh Posté le 19-07-2001 à 12:35:07
Sur Oracle, j'utiliserais TO_DATE('20010713','yyyymmdd')
doit bien y avoir un équivalent sur SQL Server
Marsh Posté le 19-07-2001 à 14:01:53
normalement, si tu mets tes arguments entre guillemets, ça devrait aller
Code :
|
pour ma part, j'utilise Sybase sql server, qui est quasi-identique à Ms sql server (à l'origine, c'tait le même sgbd).
Si tu saisis le code suivant :
Code :
|
tu devrais obtenir le résultat suivant :
Code :
|
si c'est le cas, la comparaison de chaînes fonctionne - et je pense qu'elle doit fonctionner.
sinon, tu peux utiliser convert() avec le bon format pour convertir tes chaînes en dates, mais ça va alourdir ton select inutilement parce que ça doit tourner tel quel !!! ou alors, ton where est incomplet ?
Marsh Posté le 19-07-2001 à 15:09:52
SQL Server???
A LA RESCOUSSE!!!!!!
Utilise le between, et la fonction convert()
where convert(int, s_date) between DateDebut and DateFin
en supposant que s_date est au format AAAAMMJJ, DateDebut et DateFin aussi.
Au pire, tu utilises les fonctions d'extraction de date :
datepart (format, date)
format : yy pour AAAA, mm pour MM, dd pour DD
Qui te nrenvoie un entier.
Marsh Posté le 19-07-2001 à 16:11:21
>Fred999
et sql server, il est pas foutu de comparer des chaînes de caractères encore un produit microsoft...
parce que si on compare des chaînes de caractères, et si toutes les dates sont au format aaaammjj, c'est pas la peine de se farcir une conversion pour rien...
Marsh Posté le 19-07-2001 à 16:38:48
instantdharma > c po bon comme ca
Et puis en fait c pas MS qui sait pas comparer les chaines de caractères, ca me parait logique que la requete puisse pas te dire mathieu > simone, il en est incapable( > , c pour comparer du numérique, des dates) le seul truc que tu peux faire avec le texte, c des ORDER BY, des recherches de chaines de caractères, etc...
Essaie avec Sybase sql server, ca sera pareil.
Enfin encore merci de ton aide
Fred999 > J'essaie ta solution, ca m'a l'air pas mal
Merci
Marsh Posté le 19-07-2001 à 17:14:56
Yessss, ca marche
c le convert(int, s_date) ki me manquait ds la requete
Merci encore...
Marsh Posté le 19-07-2001 à 17:37:18
Wouala. De rien
Mais bon, normalement l'instruction BETWEEN te fait très bien les comparaisons de dates, et, comme la conversion date <-> char est implicite, ça devrait rouler tout seul...
Marsh Posté le 19-07-2001 à 11:53:50
Bonjour
Voila mon pb :
dans ma base, je stocke mes dates en varchar (aaaammjj) et dans mon module de recherche, j'ai un BETWEEN à faire avec date de début / date de fin
Je fais donc une requete du style
WHERE s_date > DateDeb AND s_date < DateFin
Pb, il ne tient pas compte de ces paramètres car il ne peux comparer les chaines caractères
La solution serait un TO_INT mais je ne trouve pas de telle fonction. Si quelqu'un connait l'equivalent du TO_INT pour SQL*Server.
Merci