[SQL] TO_INT

TO_INT [SQL] - Programmation

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

Reply

Marsh Posté le 19-07-2001 à 11:53:50   

Reply

Marsh Posté le 19-07-2001 à 12:01:45    

sql*server ne sait pas comparer des chaînes de caractères ?  :ouch: 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. ;)


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

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 ?

Reply

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...

Reply

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


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 19-07-2001 à 14:01:53    

normalement, si tu mets tes arguments entre guillemets, ça devrait aller  :??:  

Code :
  1. WHERE s_date > "20010703"
  2.   AND s_date < "20010713"


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 :
  1. declare @a varchar(8),@b varchar(8),@c varchar(8)
  2. select @a = "20010703"
  3. select @b = "20010713"
  4. select @c = "20010718"
  5. if @a > @b
  6.   print "a > b"
  7. else
  8.   print "b > a"
  9. if @b > @c
  10.   print "b > c"
  11. else
  12.   print "c > b"


tu devrais obtenir le résultat suivant :

Code :
  1. b > a
  2. c > b


 
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 ?


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

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.

Reply

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  :eek2: encore un produit microsoft... :D  
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...


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

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

Reply

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... :D

Reply

Marsh Posté le 19-07-2001 à 17:14:56   

Reply

Marsh Posté le 19-07-2001 à 17:37:18    

Wouala. De rien :bounce:
 
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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed