2015-10-09 1 views
2

J'ai une table appelée MEDECIN avec 2 colonnes comme suit:Pourquoi la clause WHERE dans la base de données Oracle XE ne fonctionne pas lors de la comparaison avec une chaîne?

 
SQL> DESC MEDECIN; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
NUM_MED         NOT NULL NUMBER(4) 
SPECIALITE        NOT NULL NVARCHAR2(13) 

et il contient 32 lignes, voici son contenu:

 
SQL> SELECT * FROM MEDECIN; 

    NUM_MED SPECIALITE 
---------- ---------------------------------------------------- 
     4 Orthopédiste 
     7 Cardiologue 
     8 Cardiologue 
     10 Cardiologue 
     19 Traumatologue 
     24 Orthopédiste 
     26 Orthopédiste 
     27 Orthopédiste 
     31 Anesthésiste 
     34 Pneumologue 
     50 Pneumologue 
     53 Traumatologue 
     54 Pneumologue 
     64 Radiologue 
     80 Cardiologue 
     82 Orthopédiste 
     85 Anesthésiste 
     88 Cardiologue 
     89 Radiologue 
     99 Anesthésiste 
     113 Pneumologue 
     114 Traumatologue 
     122 Pneumologue 
     126 Radiologue 
     135 Anesthésiste 
     140 Cardiologue 
     141 Traumatologue 
     144 Radiologue 
     152 Cardiologue 
     179 Anesthésiste 
     180 Cardiologue 
     196 Traumatologue 

32 rows selected. 

Le problème est que quand j'exécute la demande SELECT * FROM MEDECIN WHERE SPECIALITE = 'Cardiologue'; I obtenez no rows selected! Comment cela peut-il arriver? Comme vous pouvez le voir, il y a beaucoup de lignes où SPECIALITE = 'Cardiologue'.

+0

Peut être que vous pouvez trouver quelque chose de réponse ici: http://stackoverflow.com/questions/4401043/oracle-text-will-not-work-with-nvarchar2-what -else-could-be-unavailable – MaxXx1313

+3

Peut-être qu'il y a des espaces de fin. Est-ce que 'trim (SPECIALITE) = 'Cardiologue'' fonctionne? –

+1

Utilisez 'TRIM' ou' LIKE'. –

Répondre

1

Devrait fonctionner, sauf si le filtre ne correspond à aucune ligne.

Configuration

SQL> CREATE TABLE MEDECIN 
    2 (
    3  NUM_MED NUMBER(4) NOT NULL, 
    4  SPECIALITE NVARCHAR2(13) NOT NULL 
    5 ); 

Table created. 

SQL> INSERT INTO MEDECIN VALUES 
    2 (4, 'Orthopédiste' 
    3 ); 

1 row created. 

SQL> COMMIT; 

Commit complete. 

SQL> SELECT * FROM medecin; 

    NUM_MED SPECIALITE 
---------- ------------- 
     4 Orthopédiste 

Recherche

SQL> SELECT * FROM MEDECIN WHERE SPECIALITE = 'Orthopédiste'; 

    NUM_MED SPECIALITE 
---------- ------------- 
     4 Orthopédiste 

Vous pouvez également essayer TRIM/COMME pour éliminer tous les espaces de fin.

Par exemple,

SQL> INSERT INTO MEDECIN VALUES 
    2 (5, 'Orthopédis ' 
    3 ); 

1 row created. 


SQL> SELECT * FROM MEDECIN WHERE SPECIALITE = 'Orthopédis'; 

no rows selected 

SQL> SELECT * FROM MEDECIN WHERE SPECIALITE LIKE 'Orthopédis%'; 

    NUM_MED SPECIALITE 
---------- ------------- 
     4 Orthopédiste 
     5 Orthopédis 

SQL> SELECT * FROM MEDECIN WHERE TRIM(SPECIALITE) = 'Orthopédiste'; 

    NUM_MED SPECIALITE 
---------- ------------- 
     4 Orthopédiste 
+0

Merci, 'trim' fonctionne pour moi, c'est étrange parce que les valeurs ont été insérées à partir d'un script ne contenant aucun espace de fin! –

-1

Essayez

SELECT * FROM MEDECIN WHERE to_char(SPECIALITE) = 'Cardiologue' 
+0

Cela fonctionne! Merci –

0

Comme il est un NVARCHAR2 essayer de mettre un N de capital en face de la chaîne comme si = N'Cardiologue ».

+0

Cela ne fonctionne pas –