Oracle “Commence par” texte rejoindre, à l'exclusion des valeurs null
Je vais avoir quelques problèmes. Je suis en train de construire une requête SQL qui utilise "commence par" la logique. Un peu de fond de la première...
Dans la base de données que j'ai été chargé de rédiger des rapports, il y a une table "user" et un "vendeur" de la table, avec des représentants appartenant à un utilisateur. Dans une brillante initiative, le concepteur de la base de données a décidé d'associer les vendeurs à travers une correspondance de sous-chaîne à leur code d'employé. Par exemple:
John Smith "employee_code" serait "JS". Mais il a plusieurs "vendeurs" pour distinguer les différentes sortes de vente. De sorte qu'il pourrait avoir "JS1", "JS2", "JS3", etc., comme son "salesperson_code".
Pour illustrer:
user table:
|---------- | ----------- | ---------- | ---------------|
| username | firstname | lastname | employee_code |
|---------- | ----------- | ---------- | ---------------|
| JSMITH | John | Smith | JS |
|---------- | ----------- | ---------- | ---------------|
salesperson table:
|------------------ | ------------------|
| salesperson_name | salesperson_code |
|------------------ | ------------------|
| John Smith 1 | JS1 |
| John Smith 2 | JS2 |
| John Smith 3 | JS3 |
|------------------ | ------------------|
Il n'y a pas de clé étrangère sur la table salesperson en les reliant à la table utilisateur, seule la sous-chaîne à partir du code d'employé.
Je ne me souviens pas où j'ai trouvé cette réponse, mais dans mes requêtes, j'ai fait cela:
select user.name
from user user
inner join salesperson spn on spn.salesperson_code like user.employee_code || '%'
Cette logique fait avec succès la "commence par" match. Cependant, il ya des utilisateurs avec vide employé codes et ils ont, également, correspondent à cette requête.
Ce que je recherche: comment puis-je modifier cette requête, de sorte que si le employee_code est vide qu'il ne correspond pas? Je suis assez novice avec des requêtes Oracle. D'autres SGBD' ont a commence avec clause qui correspondent à des champs vides.
Je vous remercie d'avance pour votre aide!
- ...
AND user.employee_code IS NOT NULL
? - Modifier la base de données.
- Si c'était une option, le projet de Loi, je n'aurais pas écrit la question. :/
Vous devez vous connecter pour publier un commentaire.
Essayer cette
LIKE USER.EMPLOYEE_CODE || '%' AND USER.EMPLOYEE_CODE NOT NULL
. YMMV. Partager et d'en profiter.essayer
select user.name from user user inner join salesperson spn on spn.salesperson_code like DECODE (user.employee_code, '', NULL, user.employee_code || '%')
''
dans une colonne Oracle sera utile d'accepter l'entrée, mais va stockerNULL
à la place....AND USER.EMPLOYEE_CODE IS NOT NULL
est clair et facile à comprendre. Partager et d'en profiter.Je vous suggérons d'utiliser une expression régulière pour extraire le chiffre parties du code vendeur et éventuellement les chiffres de la partie. Créer une vue de la table avec les champs ou l'utiliser comme une expression de table dans la requête.
Remarque: les expressions régulières correspondre à un ou plusieurs chiffres et un ou plusieurs chiffres, respectivement.
Ajouter un
IS NOT NULL
condition: