Je dois retourner des correspondances avec une gamme de numéros de série, mais le préfixe et le suffixe doivent être supprimés p>
IE. J'ai besoin de rechercher entre les numéros de série ci-dessous, mais les numéros séquentiels ne sont que la partie centrale. P>
G4A41103801702 - G4A41113171702 P>
G4A [4110380] 1702 - G4A [4111317] 1702 P>
Je dois exclure les 3 premiers et les 4 derniers chiffres, puis rechercher entre 4110380-4111317 P>
merci p>
3 Réponses :
Baton, essayez une variante de la requête ci-dessous:
Remplacer remplacer suppose suppose que la longueur du numéro de série est constante. p> comme @Adyson mentionné, cela n'utilisera pas un index et vous devez extraire ce numéro dans une colonne indexée distincte pour une requête plus performante. J'espère que cela vous aidera! P> p> ID code> avec la colonne que vous souhaitez sélectionner. p>
Tableau code> avec Votre nom de table réelle. p>
SerialNumber code> est le nom de la colonne avec la série à interroger. p>
Je pense que vous voudrez peut-être lancer le résultat de la sous-chaîne à int
Merci, je le pense, mais si je voulais exclure les 3 premiers caractères, les sous-chaînes ne devraient pas commencer par 4 non 3?)
@ R.Baton Oui, vous êtes correct, cela devrait. Espérons que Sean corrigera la réponse à un moment donné
Si la longueur n'est pas constante, vous pouvez combiner inverse code> fonction deux fois pour exclure le document
3 code> et
DERNIER 4 code> chiffres:
substring(reverse(substring(reverse('G4A41103801702'),5)),4) ==> '4110380'
Pas besoin de lancer comme INT; cela arriverait automatiquement
Je manipulerais cela comme: Vous pouvez ensuite utiliser C1 et C2 ailleurs. p> p>
Lorsque vous dites "recherche entre", vous voulez dire tous les enregistrements> = 4110380 et <= 4111317? Ces cordes sont-elles toujours la même longueur et les chiffres requis toujours dans la même position dans les cordes? Si tel est le cas, vous devez utiliser une fonction de sous-chaîne pour trouver les chiffres de la position attendue et de la longueur attendue, jetez-la à un numéro et utilisez-la dans votre clause WHERE. Probablement ne sera probablement pas très efficérable, bien que du manque d'indexation sur ces valeurs. Si vous avez besoin de rechercher sur ces valeurs, cela pourrait être une bonne idée de les analyser dans une colonne séparée à l'insert-Time
Si possible, vous devriez voir la réparation de votre structure de données. Cela viole 1NF en faisant de multiples valeurs en un seul tuple. Il provoque toutes sortes de défis tels que les problèmes de performance et les requêtes gravement laides pour ce qui devrait être simple. Cela devrait être trois colonnes, puis une colonne calculée pour les mettre tous ensemble.
^ Ce que dit Sean, plusieurs fois plus.
Une fois que nous avons les règles de votre part sur la façon d'analyser le code dans ses 3 parties constitutives, alors l'idée susmentionnée des colonnes calculées est une bonne idée, mais d'éviter les changements système que vous pourriez faire 3 colonnes calculées contenant les parties constitutives, donc Faire des requêtes sur les valeurs faciles et potentiellement indexables.