12
votes

MySQL comme déclaration similaire pour trouver une sous-chaîne à n'importe quel endroit, sauf le début de la chaîne

J'ai une requête SQL SELECT * à partir de la table où colonne comme "% PDD%" .

Le problème est que j'ai besoin d'obtenir tous les résultats à l'exclusion de ceux qui commencent par "PDD", par lequel je veux dire trouver tout où "PDD" n'est pas au début. Comment pourrait-il être fait?

Je dois faire correspondre "PDD" quand il n'est pas au début de la colonne.


0 commentaires

4 Réponses :


0
votes

Essayez:

SELECT * FROM table WHERE column NOT LIKE 'pdd%'


1 commentaires

L'OP semble vouloir correspondre à «PDD», sauf au début de la colonne - cela ne fera pas cela ...



22
votes

Je suppose que vous voulez dire que toutes les lignes correspondent à "PDD", à l'exception de celles où "PDD" est au début.

SELECT * FROM table WHERE column LIKE '_%pdd%'.


3 commentaires

Désolé mais non. Cela ne fonctionnera pas dans des cas tels que PDD Hello PDD car le tout premier correspondant à la _ et le reste de la chaîne (y compris un autre "PDD" ) correspondra au % pdd% . L'OP n'a jamais mentionné que la chaîne «PDD» sera toujours unique parmi la chaîne, de sorte que l'un d'entre eux, où l'un d'entre eux est au début, rendra cette solution à ne pas fonctionner. OP, envisagez d'inaccepter cette réponse (comme il est incorrect) et d'accepter celles par quosoo ou marc.


@DieGodd, c'est un bon point, j'ai négligé la possibilité de la tendance à deux fois. C'est une question ancienne, je serai intéressée d'entendre le PO sur cette question. Mais comme il l'a accepté, je suppose que cela a fonctionné pour les cas dont il avait besoin.


Je suis d'accord sur le fait que l'OP que je l'ai trouvé utile et que je n'ai pas de problème, mais comme il s'agit d'un site communautaire, vous pourriez éditer la réponse à l'affirmation que cela ne travaillerait pas dans ces cas, car d'autres personnes sont susceptibles de trouver La réponse (juste comme moi), et être une vieille question ne le rend pas moins utile ou valide. Merci pour la réponse.



5
votes

Si je comprends votre exigence correctement ce dont vous avez besoin est la suivante:

SELECT * FROM table WHERE column LIKE '%pdd_%' and column NOT LIKE 'pdd_%'


0 commentaires

4
votes
SELECT * FROM table WHERE column LIKE '%pdd%' AND column NOT LIKE 'pdd%'
You can optimise the query depending on how frequent these occurrences are in your table.

0 commentaires