0
votes

SQL "substr" combiner avec "pas dans"

J'ai une table (ne) avec ces éléments: xxx

et j'utilise cette requête: xxx

Pourquoi le résultat est: xxx

et non ceci (cible): xxx

merci!


5 commentaires

Je suppose que saccalen_a46c0da_cancellare ne doit pas être dans les résultats.


Votre résultat doit pas contenir ces valeurs, non? Parce que tous ont _a à la 9ème position.


Oui, mais en dehors de la liste ne doit rester que ceci: lecot113_a42401 TVCCVC16_A46C01 CBCELEN1_A46C01 SPCBA440_A46C02 J'ai mis à jour le résultat


Quelle est la logique derrière cela?


Remettre tout enregistrement avec ce motif: longueur maximale "non 15" et substration de la longueur 9 Longueur 2 non "_a" Donc, à l'extérieur de la liste ne doit rester que cbelen16_a46c01 SPCBA440_A46C01 SPCBA440_A46C02 avec longueur toujours 15 et substrateur 9,2 = _a


4 Réponses :


2
votes

la fonction substr () code > renvoie null code> lorsque la position de démarrage est supérieure à la longueur de la chaîne, la comparaison de null code> sur '_ a " code> donne mal Résultats.
Ainsi, changez-vous à ceci: xxx pré>

Voir le Démo A>.
Résultats: P>

> | NODE                        |
> | :-------------------------- |
> | DA_RIMUOVERE                |
> | 582                         |
> | ghhtthth                    |
> | TESTVMM                     |
> | SACCALEN_A46C0da_cancellare |
> | MICTEST                     |
> | DA_CANCELLARE2              |


6 commentaires

Je changerais <9 dans <10 . Pour le reste, réponse parfaite


Correct, car la sous-chaîne prend 2 caractères.


Bien mais je voudrais aussi exclure ce: saccalen_a46c0da_cancellare


Il est exclu, vérifiez les résultats


Désolé, je voudrais inclure saccalen_a46c0da_cancellare


Il fonctionne également sans "longueur (NE.node) <9", requête: (longueur (NE.Node) <> '15' ou substrateur (NE.NODE, 9,2) non in ('_a'))



0
votes

En fait, dans SQL NULL, ni vrai non faux. Dans votre cas, une partie de votre chaîne a une longueur inférieure à 9, alors substrateur (...) renvoie null. Valeur de NULL NON IN (...) est NULL.

Les informations supplémentaires sont disponibles sur Demandez Tom p>

Donc, il suffit de réécrire la condition sur quelque chose comme p>

select  ne.NODE     
from    ne
where   nvl(substr(ne.NODE,9,2),'x') not in ('_A')


0 commentaires

0
votes

La raison est que Oracle confond la chaîne vide ( '' ') et null valeurs. Donc, la sous-chaîne renvoie null - et la plupart des comparaisons renvoient null plutôt que false.

une méthode utiliserait comme : xxx

ou regexp_like () : xxx

ou sûr que la chaîne est suffisamment longue: xxx

ou vérifiant la longueur ainsi que le patt.


0 commentaires

0
votes

Essayez la requête suivante: xxx

DB <> Fiddle Démo

acclamations !!


0 commentaires