Un besoin de date ... - SQL/NoSQL - Programmation
Marsh Posté le 16-01-2008 à 12:07:47
1/ Juste une petite remarque à propos des conversions de dates : le format que tu utilises est indifférenciable syntaxiquement du type américain. Pour cette raison, afin de réduire les risques d'erreur de conversion, utilise toujours le 3° paramètre de CONVERT (et n'utilise pas CAST) afin de forcer le pattern de la date.
2/ A vérifier dans la doc de SQL Server, mais à mon avis, il n'y a RIEN qui impose l'ordre d'exécution des conditions SQL. Du coup, le "isdate()" est certainement dans ton cas évalué après tes tentatives de conversion. Je te conseille donc de passer par un IF :
Code :
|
(ouais, c'est un peu barbare, mais ça devrait éventuellement corriger ton problème)
Si tu veux un truc moins barbare, tu peux faire une sous-requête qui fitre déjà les dates valides, et tu fais tes tests sur ce résultat.
Marsh Posté le 16-01-2008 à 12:10:50
Merci de ton eclaircisement ^^
J'aurai jurer que l'ordre des executions des condition etait effectif sur sql server. (foutu a priori )
Je vais potasser tout cela merci
Marsh Posté le 16-01-2008 à 12:18:35
A partir de tes conseils, je suis parti sur cela :
Code :
|
-> Même erreur :S, le problème est que je ne peut spécifier le dernier paramètre de CONVERT car dans la realité j'ai ce type de valeur : 01/02/2008 ou 01/02/08 ...
J'ai également essayer cela (ta proposition) :
Code :
|
et la j'obtient une erreur. Je ne connaisait pas cette syntaxe donc je vais creuser un peu
Marsh Posté le 16-01-2008 à 12:24:44
je vais faire quelques tests, je te tiens au courant.
mais là t'es bien parti pour avoir besoin d'une PS.
Marsh Posté le 16-01-2008 à 12:28:22
C'est marrant ton truc
Code :
|
Ca plante pas
Marsh Posté le 16-01-2008 à 12:31:36
Mais ça ça plante :
Code :
|
j'ai l'impression que l'optimiseur réécrit complètement la requête à chaque fois, et se met à faire n'importe quoi là où on tente de lui faire suivre une certainement logique.
à mon avis, tu vas donc devoir passer par une vue afin d'empêcher l'optimiseur de faire n'importe quoi :
Code :
|
Ensuite tu fais ta requête tu début, mais sur la vue :
Code :
|
arf, non, ça marche pas
amuse-toi bien, là c'est total n'importe quoi ce que fait SQL Server...
t'es bon pour faire une fonction qui retourne une table (comme la vue, mais une fonction, là t'es sûr que SQL Server va pas s'amuser à faire n'importe quoi... enfin... sûr... espérer tout du moins
Marsh Posté le 16-01-2008 à 12:46:00
ca me rassure j'avais peur d'etre le seul a croire que Sql Serv se vautrait sur le coup ^^
Marsh Posté le 16-01-2008 à 12:49:00
Le seule solution que j'ai trouvée pour l'instant :
Code :
|
Marsh Posté le 16-01-2008 à 12:54:13
Encore plus fort ...
Code :
|
Marsh Posté le 16-01-2008 à 12:58:41
le souci, c'est que si tu passes pas par des dates, :
10/01/1900 > 01/01/2008
Marsh Posté le 16-01-2008 à 13:07:16
Oui
J'arrive pas a croire que je vais devoir faire un immondice pour un truc aussi idiot ...
Marsh Posté le 16-01-2008 à 13:12:56
Bon j'ai trouvé une solution porchesque
Code :
|
TADAAAA !!!!!
Marsh Posté le 16-01-2008 à 11:53:56
Bonjour,
J'ai un problème incompréhensible Je pose les bases ...
SGBD : SQL Server 2000
Contraintes : J'ai une table qui contient une date dans un champ de type VARCHAR. Cette contrainte n'est pas négociable... sinon il n'y aurait probablement pas de problèmes...
Le bug: Lors d'une simple comparaison de dates sur ce champs je me prend une belle exception. cf le script ci dessous
Regardez attentivement ce script, et si quelqu'un comprend pourquoi ces requettes ne fontionne pas....
Merci d'avance
Message édité par Koyomi le 16-01-2008 à 11:54:26