|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2008 Messages : 2 ![]() |
Bonjour,
J'ai une liste de valeurs du type Champ1 CRA CRB CRC CRD CR1 CR2 et j'ai une table ou j'ai une correspondance du type Debut Fin Valeur CRA CR9 ABCD Lorsque je fais mon instruction Code :
Je pense qu'il s'agit d'un probleme ascii vs EBCDIC , Mais comment régler ce problème. Merci de votre aide. Philippe |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
BETWEEN sur des charactères!
Le between est exclusif (correspond a > and < et non à >= and <=) Passez par des clef technique comme un AUTO INCREMENT... |
|
|
00
|
|
|
#3 | |||||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
Citation:
Citation:
Donc le problème est ailleurs. Il est probable que dans le classement par défaut de la base, 'CRA' vienne après 'CR9' et donc ne puisse pas renvoyer de valeur. Pour tester, exécuter le test suivant : Code :
Citation:
BETWEEN 'CRA' AND 'CR9' ne peut rien renvoyer
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
|||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
Je me confonds en excuse BETWEEN n'est pas exclusif!
C'est çà de répondre un dimanche matin :-) Bien sûr que le BETWEEN fonctionne sur les caractères je suis seulement choqué de son utilisation, résultat d'une modélisation souvent désastreuse (je suis payé à temps plein pour reprendre les applications "modélisées" par des développeurs qui sont tombées en prod...). |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Cela peut être une modélisation parfaitement correcte car elle répond en totalité à la forme normale domaine clef !
J'avais hélas donné un exemples de cette forme normale sur wikipédia. malheureusement un crétin l'a supprimé.. Il s'agissait d'un exemples avec des véhicules et la catégorie des véhicules. De 0 à 3,5 T le véhicule est classé VL, au delà de 3.5 t le véhicule est classé PL. Il y a bien un domaine (une plage de valeur) pour une clef (la catégorie). C'est la forme normale Domaine clef et on la rencontre plus souvent qu'on ne le croit. Par exemple les tarifs d'affranchissement en sont un autre exemple. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() |
Citation:
Citation:
Heureusement on peut s'appuyer quotidiennement sur vos travaux pour les remettre dans le droit chemin ![]() A+ |
||
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
Bon, pour en revenir au problème qui turlupine philmot62,
si c'est bien le classement qui lui joue un tour, voici une petite solution simple et pas chère qui règle la question : Code :
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
||
|
|
00
|
|
|
#9 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Il suffit plus simplement de rajouter un COLLATE au bon endroit !
Code :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
SQLpro, ton site est, certes, impressionnant, mais le COLLATE French_CI_AI ne résout pas le problème :
On suppose que les deux tables xxx et yyy existent avec un classement quelconque. Si on essaye de changer le comportement du BETWEEN avec COLLATE French_CI_AI, il ne se passe rien Code :
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
En effet, je ne sais pas quelle collation pour classer '1' > 'A'... Par contre, pour ta solution Nepumocene, je crains qu'elle ait des effets indésirables, par exemple, une recherche fera surement ressortir 'CRA'... Je pense que la solution est bien de créer une table contenant l'ordre voulu : ID | Code | Ordre et de faire une jointure dessus, puis filtrer avec le BETWEEN sur ordre ! |
|
|
00
|
|
|
#12 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Ta bidouille est bonne, mais mélanger des lettres et des chiffres ne donne jamais rien de bon. Car a l'envers celle là ne marcherait pas :
Code :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#13 | |||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
Dans cette bidouille, je m'en suis tenu strictement aux données du problème posé par philmot62.
@aieeeuuuuu Citation:
Ta solution de créer une table de tri est évidement l'arme absolue. Cependant la colonne Ordre de ta table doit certainement être saisie "à la main", il ne faut pas que la liste des codes soit trop longue ... @SQLpro Citation:
INSERT INTO yyy VALUES ('CRA', 'CR9', 'ABCD') ou bien INSERT INTO yyy VALUES ('CR9', 'CRA', 'ABCD') L'exemple avec INSERT INTO yyy VALUES ('AAA', '999', 'ABCD') ne peut jamais fonctionner car 'AAA' ou '999' sont toujours inférieurs aux valeurs de Champ1 de xxx. C'est intéressant comme discussion, je n'avais pas encore eu l'idée d'utiliser COLLATE "à la volée" dans une requête. Citation:
La solution est probablement avant la mise en exploitation de la base de données ; à savoir une bonne codification cohérente des données qui ne prête à aucune confusion. (Je ne sais pas si la base de philmot62 est réellement une base professionnelle ou s'il s'agit d'un test qu'il a fait sur un coin de table)
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
|||
|
|
00
|
|
|
#14 | ||
![]() ![]() |
L'auteur répond déjà à cette question :
Donc : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 851 ![]() |
Eh ben voilà ....
![]() et d'ailleurs, les deux syntaxes (Waldar, SQLpro) fonctionnent : Code :
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
||
|
|
00
|
|
|
#16 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Bien vu pour l'EBCDIC car originellement le jeu de caractères (profondement debile de IBM) mélange lettre et nombre dans le classement.
En effet les lettres sont numérotés de 0 à 9 et les chiffres de A à F donc le classement est : ABCDEFGHIJ01234 KLMNOPQRST56789 UVWXYZ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#17 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
"Pourquoi faire simple quand on peut faire compliqué"... J'en perds mon SQL_Latin1 (<== désolé, j'ai pas pu m'empecher )Citation:
Code SQL :
==> Citation:
|
||||
|
|
00
|
|
|
#18 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Ca dépend de la version de EBCDIC !!!
Mais la première (IBM 360) c'était ça !!!!!!!!!! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#19 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com