Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Error converting data type varchar to numeric.

4 réponses
Avatar
Ric
Bonjour a tous !

J'ai besoin d'aide. Commençons par la base. Je travail avec SQLServer 2000.
Ma table a 12 colonnes de type varchar Ex.:(Condition1_Min, Condition1_Max,
Condition2_Min, Condition2_Max etc....) Il y a des valeurs qui doivent être
interprété comme du numérique et d'autre en tant que alpha. Voici une requête
qui ne fonctionne pas dans Query Analyser. Il semble que si je cast mon
condition1_min, par exemple, dès que j'ai une requête qui utilise encore
condition1_min mais non "casté" alors sql server me donne ce message d'erreur.

Voici un exemple de requête :

SELECT
NO_MACHINE,NOM_PROCEDURE,CONDITION1_MIN,CONDITION1_MAX,CONDITION1_TOUS,CONDITION2_MIN,CONDITION2_MAX,CONDITION2_TOUS,CONDITION3_MIN,CONDITION3_MAX,CONDITION3_TOUS,CONDITION4_MIN,CONDITION4_MAX,CONDITION4_TOUS,CONDITION5_MIN,CONDITION5_MAX,CONDITION5_TOUS,CONDITION6_MIN,CONDITION6_MAX,CONDITION6_TOUS,NO_GRP_INSTRUCTIONS,RAZ_BORNE
FROM MES_PROCEDURECONDITIONS

WHERE (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX
<= 'AK') AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND
NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2') AND (CONDITION2_MIN >= '4'
AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE = 'Insp. Feuille Début' OR
(NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'False' AND CONDITION1_MAX <=
'False') AND (cast(CONDITION2_MIN as decimal) >= 0.065 AND
cast(CONDITION2_MAX as decimal) <= 0.065) AND (CONDITION3_MIN >= '4' AND
CONDITION3_MAX <= '4') AND (CONDITION4_MIN >= '2' AND CONDITION4_MAX <= '2')
AND NOM_PROCEDURE = 'Inspection Final' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND (CONDITION2_MIN >=
'2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '4' AND CONDITION3_MAX
<= '4') AND (CONDITION4_MIN >= '0' AND CONDITION4_MAX <= '0') AND
NOM_PROCEDURE = 'Largeur 1 re bob équ' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Final 1er bob' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Foil 1re bobi.' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND
(CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE =
'Largeur_PI' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN >= '145418001'
AND CONDITION1_MAX <= '145418001') AND (CONDITION2_MIN >= '2' AND
CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '875' AND CONDITION3_MAX <=
'875') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX <= '4') AND
NOM_PROCEDURE = 'Lavage' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN <=
'False' AND CONDITION1_MAX >= 'False') AND (cast(CONDITION2_MIN as decimal)
>= 0.065 AND cast(CONDITION2_MAX as decimal(38,10)) <= 0.065) AND
(CONDITION3_MIN >= '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE =
'Standardi. Final 1er b' OR (NO_MACHINE = '00300') AND (cast(CONDITION1_MIN
as decimal(38,10)) >= 0.065 AND cast(CONDITION1_MAX as decimal) <= 0.065) AND
(CONDITION2_MIN >= '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >=
'4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE = 'Standardisation Déb.'

ORDER BY NO_MACHINE,NOM_PROCEDURE

Dans condition min et max je peux avoir des alphas et des num.

La requête est fait génériquement par un programme. J'ai besoin de vos
idées. A part me créer 12 nouvelles colonnes (donc d'avoir des min et max num
et alpha dans ma table) je n'ai pas trouvé de solution. Ne pas vous baser sur
la syntaxe (le numéro de machine devrait être une fois par exemple, je le
corrigerai après ;o))

Merci pour votre aide !!!

4 réponses

Avatar
Fred BROUARD
Bonjour,

1)
commencez par présentez vos requêtes correctement (indentation passage à la
ligne de chaque prédicat et clauses...) c'est un magma informe indigne d'un
développeur. C'est donc ilisible et peu de gens ausrons envie de vous répondre.

2)
donnez la définition des types de dolonnes. Sans cela difficile de vous
répondre, nous ne sommes pas des devins !

A +

Ric a écrit:
Bonjour a tous !

J'ai besoin d'aide. Commençons par la base. Je travail avec SQLServer 2000.
Ma table a 12 colonnes de type varchar Ex.:(Condition1_Min, Condition1_Max,
Condition2_Min, Condition2_Max etc....) Il y a des valeurs qui doivent être
interprété comme du numérique et d'autre en tant que alpha. Voici une requête
qui ne fonctionne pas dans Query Analyser. Il semble que si je cast mon
condition1_min, par exemple, dès que j'ai une requête qui utilise encore
condition1_min mais non "casté" alors sql server me donne ce message d'erreur.

Voici un exemple de requête :

SELECT
NO_MACHINE,NOM_PROCEDURE,CONDITION1_MIN,CONDITION1_MAX,CONDITION1_TOUS,CONDITION2_MIN,CONDITION2_MAX,CONDITION2_TOUS,CONDITION3_MIN,CONDITION3_MAX,CONDITION3_TOUS,CONDITION4_MIN,CONDITION4_MAX,CONDITION4_TOUS,CONDITION5_MIN,CONDITION5_MAX,CONDITION5_TOUS,CONDITION6_MIN,CONDITION6_MAX,CONDITION6_TOUS,NO_GRP_INSTRUCTIONS,RAZ_BORNE
FROM MES_PROCEDURECONDITIONS

WHERE (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX
<= 'AK') AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND
NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2') AND (CONDITION2_MIN >= '4'
AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE = 'Insp. Feuille Début' OR
(NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'False' AND CONDITION1_MAX <=
'False') AND (cast(CONDITION2_MIN as decimal) >= 0.065 AND
cast(CONDITION2_MAX as decimal) <= 0.065) AND (CONDITION3_MIN >= '4' AND
CONDITION3_MAX <= '4') AND (CONDITION4_MIN >= '2' AND CONDITION4_MAX <= '2')
AND NOM_PROCEDURE = 'Inspection Final' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND (CONDITION2_MIN >=
'2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '4' AND CONDITION3_MAX
<= '4') AND (CONDITION4_MIN >= '0' AND CONDITION4_MAX <= '0') AND
NOM_PROCEDURE = 'Largeur 1 re bob équ' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Final 1er bob' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Foil 1re bobi.' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND
(CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE =
'Largeur_PI' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN >= '145418001'
AND CONDITION1_MAX <= '145418001') AND (CONDITION2_MIN >= '2' AND
CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '875' AND CONDITION3_MAX <=
'875') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX <= '4') AND
NOM_PROCEDURE = 'Lavage' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN <=
'False' AND CONDITION1_MAX >= 'False') AND (cast(CONDITION2_MIN as decimal)

= 0.065 AND cast(CONDITION2_MAX as decimal(38,10)) <= 0.065) AND



(CONDITION3_MIN >= '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE =
'Standardi. Final 1er b' OR (NO_MACHINE = '00300') AND (cast(CONDITION1_MIN
as decimal(38,10)) >= 0.065 AND cast(CONDITION1_MAX as decimal) <= 0.065) AND
(CONDITION2_MIN >= '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >=
'4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE = 'Standardisation Déb.'

ORDER BY NO_MACHINE,NOM_PROCEDURE

Dans condition min et max je peux avoir des alphas et des num.

La requête est fait génériquement par un programme. J'ai besoin de vos
idées. A part me créer 12 nouvelles colonnes (donc d'avoir des min et max num
et alpha dans ma table) je n'ai pas trouvé de solution. Ne pas vous baser sur
la syntaxe (le numéro de machine devrait être une fois par exemple, je le
corrigerai après ;o))

Merci pour votre aide !!!



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Fred BROUARD
... suite ...

3)
Utilisez le BETWEEN plutot que des répétitions de >= et <
Exemple :
...
AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK')
AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4')
...

...
AND 'AK' BETWEEN CONDITION1_MIN AND CONDITION1_MAX
AND '4' BETWEEN CONDITION2_MIN AND CONDITION2_MAX
...

4) certains prédicat sont incompréhensible, notamment votre usage des OR et le
parenthésage semble contradictoire :

WHERE (NO_MACHINE = '00300')
AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK')
AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4')
AND NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300')
AND (CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2')
AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4')
AND NOM_PROCEDURE = 'Insp. Feuille Début' OR (NO_MACHINE = '00300')
AND (CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False')
...

A +


Ric a écrit:
Bonjour a tous !

J'ai besoin d'aide. Commençons par la base. Je travail avec SQLServer 2000.
Ma table a 12 colonnes de type varchar Ex.:(Condition1_Min, Condition1_Max,
Condition2_Min, Condition2_Max etc....) Il y a des valeurs qui doivent être
interprété comme du numérique et d'autre en tant que alpha. Voici une requête
qui ne fonctionne pas dans Query Analyser. Il semble que si je cast mon
condition1_min, par exemple, dès que j'ai une requête qui utilise encore
condition1_min mais non "casté" alors sql server me donne ce message d'erreur.

Voici un exemple de requête :

SELECT
NO_MACHINE,NOM_PROCEDURE,CONDITION1_MIN,CONDITION1_MAX,CONDITION1_TOUS,CONDITION2_MIN,CONDITION2_MAX,CONDITION2_TOUS,CONDITION3_MIN,CONDITION3_MAX,CONDITION3_TOUS,CONDITION4_MIN,CONDITION4_MAX,CONDITION4_TOUS,CONDITION5_MIN,CONDITION5_MAX,CONDITION5_TOUS,CONDITION6_MIN,CONDITION6_MAX,CONDITION6_TOUS,NO_GRP_INSTRUCTIONS,RAZ_BORNE
FROM MES_PROCEDURECONDITIONS

WHERE (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX
<= 'AK') AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND
NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2') AND (CONDITION2_MIN >= '4'
AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE = 'Insp. Feuille Début' OR
(NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'False' AND CONDITION1_MAX <=
'False') AND (cast(CONDITION2_MIN as decimal) >= 0.065 AND
cast(CONDITION2_MAX as decimal) <= 0.065) AND (CONDITION3_MIN >= '4' AND
CONDITION3_MAX <= '4') AND (CONDITION4_MIN >= '2' AND CONDITION4_MAX <= '2')
AND NOM_PROCEDURE = 'Inspection Final' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND (CONDITION2_MIN >=
'2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '4' AND CONDITION3_MAX
<= '4') AND (CONDITION4_MIN >= '0' AND CONDITION4_MAX <= '0') AND
NOM_PROCEDURE = 'Largeur 1 re bob équ' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Final 1er bob' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN >=
'0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Foil 1re bobi.' OR (NO_MACHINE =
'00300') AND (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND
(CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE =
'Largeur_PI' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN >= '145418001'
AND CONDITION1_MAX <= '145418001') AND (CONDITION2_MIN >= '2' AND
CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '875' AND CONDITION3_MAX <=
'875') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX <= '4') AND
NOM_PROCEDURE = 'Lavage' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN <=
'False' AND CONDITION1_MAX >= 'False') AND (cast(CONDITION2_MIN as decimal)

= 0.065 AND cast(CONDITION2_MAX as decimal(38,10)) <= 0.065) AND



(CONDITION3_MIN >= '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE =
'Standardi. Final 1er b' OR (NO_MACHINE = '00300') AND (cast(CONDITION1_MIN
as decimal(38,10)) >= 0.065 AND cast(CONDITION1_MAX as decimal) <= 0.065) AND
(CONDITION2_MIN >= '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >=
'4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE = 'Standardisation Déb.'

ORDER BY NO_MACHINE,NOM_PROCEDURE

Dans condition min et max je peux avoir des alphas et des num.

La requête est fait génériquement par un programme. J'ai besoin de vos
idées. A part me créer 12 nouvelles colonnes (donc d'avoir des min et max num
et alpha dans ma table) je n'ai pas trouvé de solution. Ne pas vous baser sur
la syntaxe (le numéro de machine devrait être une fois par exemple, je le
corrigerai après ;o))

Merci pour votre aide !!!



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Patrice
Par exemple je vois que tu compares tantôt condition2_min à du texte
(CONDITION2_MIN >= 'LR' ) ou à un nombre : cast(CONDITION2_MIN as decimal)
= 0.065


Si CONDITION2_MIN contient du texte, la conversion en nombre échouera et
donnera ce message...

Quelques pistes un peu au hasard n'ayant aucune idée de ce que tu souhaites
faire :
- il serait possible d'utiliser ISNUMERIC pour voir si le champ contient ou
non une valeur numérique
- créer des lignes comportant chacune deux champs ( plutôt qu'une ligne de
12 colonnes) pour modéliser les conditions
- ou peut-être de donner le type de borne de chaque ligne (ou SQL_VARIANT ?)
- ou mettre les fonctions numériques dans une table et les fonctions
alphanumériques dans une autre
etc...




--

"Ric" a écrit dans le message de
news:
Bonjour a tous !

J'ai besoin d'aide. Commençons par la base. Je travail avec SQLServer


2000.
Ma table a 12 colonnes de type varchar Ex.:(Condition1_Min,


Condition1_Max,
Condition2_Min, Condition2_Max etc....) Il y a des valeurs qui doivent


être
interprété comme du numérique et d'autre en tant que alpha. Voici une


requête
qui ne fonctionne pas dans Query Analyser. Il semble que si je cast mon
condition1_min, par exemple, dès que j'ai une requête qui utilise encore
condition1_min mais non "casté" alors sql server me donne ce message


d'erreur.

Voici un exemple de requête :

SELECT



NO_MACHINE,NOM_PROCEDURE,CONDITION1_MIN,CONDITION1_MAX,CONDITION1_TOUS,CONDI
TION2_MIN,CONDITION2_MAX,CONDITION2_TOUS,CONDITION3_MIN,CONDITION3_MAX,CONDI
TION3_TOUS,CONDITION4_MIN,CONDITION4_MAX,CONDITION4_TOUS,CONDITION5_MIN,COND
ITION5_MAX,CONDITION5_TOUS,CONDITION6_MIN,CONDITION6_MAX,CONDITION6_TOUS,NO_
GRP_INSTRUCTIONS,RAZ_BORNE
FROM MES_PROCEDURECONDITIONS

WHERE (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'AK' AND


CONDITION1_MAX
<= 'AK') AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND
NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2') AND (CONDITION2_MIN > '4'
AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE = 'Insp. Feuille Début' OR
(NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'False' AND CONDITION1_MAX


< > 'False') AND (cast(CONDITION2_MIN as decimal) >= 0.065 AND
cast(CONDITION2_MAX as decimal) <= 0.065) AND (CONDITION3_MIN >= '4' AND
CONDITION3_MAX <= '4') AND (CONDITION4_MIN >= '2' AND CONDITION4_MAX < '2')
AND NOM_PROCEDURE = 'Inspection Final' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND (CONDITION2_MIN
> '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '4' AND


CONDITION3_MAX
<= '4') AND (CONDITION4_MIN >= '0' AND CONDITION4_MAX <= '0') AND
NOM_PROCEDURE = 'Largeur 1 re bob équ' OR (NO_MACHINE = '00300') AND
(CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN
> '0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND


CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Final 1er bob' OR (NO_MACHINE > '00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK') AND
(CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN
> '0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND


CONDITION4_MAX
<= '4') AND NOM_PROCEDURE = 'Largeur Foil 1re bobi.' OR (NO_MACHINE > '00300') AND (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND
(CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE > 'Largeur_PI' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN > '145418001'
AND CONDITION1_MAX <= '145418001') AND (CONDITION2_MIN >= '2' AND
CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '875' AND CONDITION3_MAX < > '875') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX <= '4') AND
NOM_PROCEDURE = 'Lavage' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN


< > 'False' AND CONDITION1_MAX >= 'False') AND (cast(CONDITION2_MIN as
decimal)
>= 0.065 AND cast(CONDITION2_MAX as decimal(38,10)) <= 0.065) AND
(CONDITION3_MIN >= '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE > 'Standardi. Final 1er b' OR (NO_MACHINE = '00300') AND


(cast(CONDITION1_MIN
as decimal(38,10)) >= 0.065 AND cast(CONDITION1_MAX as decimal) <= 0.065)


AND
(CONDITION2_MIN >= '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN > > '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE = 'Standardisation Déb.'

ORDER BY NO_MACHINE,NOM_PROCEDURE

Dans condition min et max je peux avoir des alphas et des num.

La requête est fait génériquement par un programme. J'ai besoin de vos
idées. A part me créer 12 nouvelles colonnes (donc d'avoir des min et max


num
et alpha dans ma table) je n'ai pas trouvé de solution. Ne pas vous baser


sur
la syntaxe (le numéro de machine devrait être une fois par exemple, je le
corrigerai après ;o))

Merci pour votre aide !!!


Avatar
Patrice
Au delà de ce problème ponctuel, et si tu peux te permettre de mettre à jour
cela, tu peux vouloir ouvrir une discussion pour voir si quelqu'un peut
proposer une autre façon de faire...

Par exemple d'après ce que je comprends, je proposerai plutôt d'essayer de
générer quelque chose comme :

SELECT MesDonnees.Champ1,MesDonnes.Champ2
FROM MesDonnees
JOIN MesCriteres AS a AND crit=1 AND Champ1 BETWEEN a.Min AND a.Max
JOIN MesCriteres AS b AND crit=2 AND Champ2 BETWEEN b.Min AND b.Max
etc...
WHERE CODE_MACHINE='00300'

Avec peut-être une jointure supplémentaire si chaque "NOM_PROCEDURE" doit
utiliser des critères de sélection qui lui sont propres... A mon sens chaque
critère devrait être soit numérique, soit texte. Il semble actuellement
qu'il puisse être tantôt l'un tantôt l'autre...

Bonne continuation...

Patrice

--

"Patrice" a écrit dans le message de
news:
Par exemple je vois que tu compares tantôt condition2_min à du texte
(CONDITION2_MIN >= 'LR' ) ou à un nombre : cast(CONDITION2_MIN as decimal)
>= 0.065
Si CONDITION2_MIN contient du texte, la conversion en nombre échouera et
donnera ce message...

Quelques pistes un peu au hasard n'ayant aucune idée de ce que tu


souhaites
faire :
- il serait possible d'utiliser ISNUMERIC pour voir si le champ contient


ou
non une valeur numérique
- créer des lignes comportant chacune deux champs ( plutôt qu'une ligne


de
12 colonnes) pour modéliser les conditions
- ou peut-être de donner le type de borne de chaque ligne (ou SQL_VARIANT


?)
- ou mettre les fonctions numériques dans une table et les fonctions
alphanumériques dans une autre
etc...




--

"Ric" a écrit dans le message de
news:
> Bonjour a tous !
>
> J'ai besoin d'aide. Commençons par la base. Je travail avec SQLServer
2000.
> Ma table a 12 colonnes de type varchar Ex.:(Condition1_Min,
Condition1_Max,
> Condition2_Min, Condition2_Max etc....) Il y a des valeurs qui doivent
être
> interprété comme du numérique et d'autre en tant que alpha. Voici une
requête
> qui ne fonctionne pas dans Query Analyser. Il semble que si je cast mon
> condition1_min, par exemple, dès que j'ai une requête qui utilise encore
> condition1_min mais non "casté" alors sql server me donne ce message
d'erreur.
>
> Voici un exemple de requête :
>
> SELECT
>



NO_MACHINE,NOM_PROCEDURE,CONDITION1_MIN,CONDITION1_MAX,CONDITION1_TOUS,CONDI



TION2_MIN,CONDITION2_MAX,CONDITION2_TOUS,CONDITION3_MIN,CONDITION3_MAX,CONDI



TION3_TOUS,CONDITION4_MIN,CONDITION4_MAX,CONDITION4_TOUS,CONDITION5_MIN,COND



ITION5_MAX,CONDITION5_TOUS,CONDITION6_MIN,CONDITION6_MAX,CONDITION6_TOUS,NO_
GRP_INSTRUCTIONS,RAZ_BORNE
> FROM MES_PROCEDURECONDITIONS
>
> WHERE (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'AK' AND
CONDITION1_MAX
> <= 'AK') AND (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND
> NOM_PROCEDURE = 'ChangRouleaux' OR (NO_MACHINE = '00300') AND
> (CONDITION1_MIN >= '2' AND CONDITION1_MAX <= '2') AND (CONDITION2_MIN
> '4'
> AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE = 'Insp. Feuille Début' OR
> (NO_MACHINE = '00300') AND (CONDITION1_MIN >= 'False' AND


CONDITION1_MAX
< > > 'False') AND (cast(CONDITION2_MIN as decimal) >= 0.065 AND
> cast(CONDITION2_MAX as decimal) <= 0.065) AND (CONDITION3_MIN >= '4'


AND
> CONDITION3_MAX <= '4') AND (CONDITION4_MIN >= '2' AND CONDITION4_MAX < > '2')
> AND NOM_PROCEDURE = 'Inspection Final' OR (NO_MACHINE = '00300') AND
> (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND (CONDITION2_MIN
> > > '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '4' AND
CONDITION3_MAX
> <= '4') AND (CONDITION4_MIN >= '0' AND CONDITION4_MAX <= '0') AND
> NOM_PROCEDURE = 'Largeur 1 re bob équ' OR (NO_MACHINE = '00300') AND
> (CONDITION1_MIN >= 'False' AND CONDITION1_MAX <= 'False') AND
> (CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN
> > > '0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND
CONDITION4_MAX
> <= '4') AND NOM_PROCEDURE = 'Largeur Final 1er bob' OR (NO_MACHINE > > '00300') AND (CONDITION1_MIN >= 'AK' AND CONDITION1_MAX <= 'AK') AND
> (CONDITION2_MIN >= 'LR' AND CONDITION2_MAX <= 'LR') AND (CONDITION3_MIN
> > > '0' AND CONDITION3_MAX <= '0') AND (CONDITION4_MIN >= '4' AND
CONDITION4_MAX
> <= '4') AND NOM_PROCEDURE = 'Largeur Foil 1re bobi.' OR (NO_MACHINE > > '00300') AND (CONDITION1_MIN >= 'LR' AND CONDITION1_MAX <= 'LR') AND
> (CONDITION2_MIN >= '4' AND CONDITION2_MAX <= '4') AND NOM_PROCEDURE > > 'Largeur_PI' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN > > '145418001'
> AND CONDITION1_MAX <= '145418001') AND (CONDITION2_MIN >= '2' AND
> CONDITION2_MAX <= '2') AND (CONDITION3_MIN >= '875' AND CONDITION3_MAX


< > > '875') AND (CONDITION4_MIN >= '4' AND CONDITION4_MAX <= '4') AND
> NOM_PROCEDURE = 'Lavage' OR (NO_MACHINE = '00300') AND (CONDITION1_MIN
< > > 'False' AND CONDITION1_MAX >= 'False') AND (cast(CONDITION2_MIN as
decimal)
> >= 0.065 AND cast(CONDITION2_MAX as decimal(38,10)) <= 0.065) AND
> (CONDITION3_MIN >= '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE > > 'Standardi. Final 1er b' OR (NO_MACHINE = '00300') AND
(cast(CONDITION1_MIN
> as decimal(38,10)) >= 0.065 AND cast(CONDITION1_MAX as decimal) < 0.065)
AND
> (CONDITION2_MIN >= '2' AND CONDITION2_MAX <= '2') AND (CONDITION3_MIN
> > '4' AND CONDITION3_MAX <= '4') AND NOM_PROCEDURE = 'Standardisation


Déb.'
>
> ORDER BY NO_MACHINE,NOM_PROCEDURE
>
> Dans condition min et max je peux avoir des alphas et des num.
>
> La requête est fait génériquement par un programme. J'ai besoin de vos
> idées. A part me créer 12 nouvelles colonnes (donc d'avoir des min et


max
num
> et alpha dans ma table) je n'ai pas trouvé de solution. Ne pas vous


baser
sur
> la syntaxe (le numéro de machine devrait être une fois par exemple, je


le
> corrigerai après ;o))
>
> Merci pour votre aide !!!