J'essaie de répondre à une question sur Stack Overflow et je veux tester la réponse pour voir si elle est correcte. Je n'ai pas Oracle, cependant, j'utilise donc sqlfiddle.com .
Voici la requête: http://sqlfiddle.com/#!4/b18a2/11 .
Où puis-je voir le résultat? Le résultat devrait être '1
' (employé 1).
Vous voyez le résultat dans la partie inférieure de l'écran. Cependant, votre requête ne renvoie aucun enregistrement (vous avez créé les tables, mais vous n’avez inséré aucune donnée). Par conséquent, aucun résultat n’est affiché.
En plus de la réponse de Sathya, votre requête comporte quelques défauts.
Vous devez insérer des données comme ceci:
Insert into employees (Employee, Name, Email)
Values (1, 'joebloggs','[email protected]');
Je ne pense pas que votre requête fonctionnera de toute façon car vous devez concaténer quelques signes %
dedans aussi, cette requête fonctionne
Select Employee
From Employees
Where email like '%' || name || '%';
Vous devez également changer vos types de données pour la colonne de noms de char(25)
à varchar(25)
à l'aide de char(25)
je pense, insère le type de données avec des espaces afin que votre comparaison soit gagnée ' t match.
Ce type de chose dépend toujours des données. Vous avez raison, il est plutôt étrange d’avoir le nom d’un seul mot. Pour contourner ce problème, vous devez modifier votre requête afin de scinder l'adresse électronique sur la période.
Donc, votre insertion serait:
Insert into employees (Employee, Name, Email)
Values (1, 'joe bloggs','[email protected]');
Et votre choix serait:
Select Employee
From Employees
Where Replace(email, '.' ,' ') like '%' || name || '%';
Évidemment, cela signifie que les noms ne doivent avoir que le format de FirstName{space}LastName
et que les adresses électroniques ne doivent avoir que le format de FirstName{dot}[email protected]
.
Je me méfierais de faire quelque chose comme ça à moins que vous ne soyez sûr à 100% que les données seront toujours au format spécifié.