Je m'entraîne sur un site Web, où ils me demandent d'afficher une liste de joueurs avec un «e» ou un «E» dans leur nom en utilisant une seule condition WHERE.
Ma requête montre le même résultat que ce qui est attendue, mais le site Web dit "J'ai fait quelque chose qui n'est pas correct ou le résultat est incomplet".
Mon instruction WHERE compte-t-elle comme une condition? Existe-t-il un moyen de ne pas respecter la casse uniquement après le LIKE?
SELECT DISTINCT s.spelersnr, voorletters || ' ' || naam AS spelersnaam
FROM spelers s INNER JOIN wedstrijden w
ON s.spelersnr = w.spelersnr
WHERE LOWER(naam) LIKE '%e%'
ORDER BY s.spelersnr ASC
4 Réponses :
En supposant que votre base de données prend en charge une fonction LOWER , alors votre clause WHERE actuelle semble déjà être une condition:
WHERE naam ~* '.*e.*'
Dans Postgres, vous pouvez également écrire ceci en utilisant SIMILAR TO :
WHERE naam SIMILAR TO '%(e|E)%'
Ou, vous pouvez utiliser une expression régulière POSIX:
WHERE LOWER(naam) LIKE '%e%'
Ce sont deux nouvelles façons que je ne connaissais pas, merci.
comme vous l'avez mentionné, c'est postgres db, utiliser des éléments similaires ou similaires vous aidera. une explication détaillée est dans le lien ci-dessous https: //dba.stackexchange. com / questions / 10694 / correspondance-de-modèle-avec-des-expressions-similaires-similaires-ou-régulières-dans-postgresql
cela fonctionnera:
SELECT DISTINCT s.spelersnr, voorletters || ' ' || naam AS spelersnaam
FROM spelers s INNER JOIN wedstrijden w
ON s.spelersnr = w.spelersnr
WHERE REGEXP_LIKE (naam, '(.)*e(.)*', 'i')
ORDER BY s.spelersnr ASC
Le moyen le plus simple est d'utiliser ILIKE:
WHERE naam ILIKE '%e%'
Il s'agit d'un opérateur Postgres intégré qui effectue une correspondance insensible à la casse. Ceci est expliqué dans la documentation .
p >
Quel est votre dbms?
@ D-Shih im utilisant pgAdmin et sql dropbox, je pense que postgreSQL