2015-10-09 3 views
2

У меня есть таблица под названием MEDECIN с 2 колонками следующим образом:Почему предложение WHERE в базе данных Oracle XE не работает при сравнении со строкой?

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

И он содержит 32 строки, вот его содержание:

 
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. 

Проблема заключается в том, что, когда я выполняю запрос SELECT * FROM MEDECIN WHERE SPECIALITE = 'Cardiologue'; I получите no rows selected! Как это может произойти? Как вы можете видеть, есть много строк, где SPECIALITE = 'Cardiologue'.

+0

Может быть, вы можете узнать ответ что-то здесь: http://stackoverflow.com/questions/4401043/oracle-text-will-not-work-with-nvarchar2-what -else-may-be-unavailable – MaxXx1313

+3

Возможно, есть некоторые завершающие пробелы. Работает ли 'trim (SPECIALITE) = 'Cardiologue''? –

+1

Либо используйте 'TRIM' или' LIKE'. –

ответ

1

Должен работать, если фильтр не соответствует ни одному ряду.

Настройка

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 

Запрос

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

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

Вы также можете попробовать TRIM/LIKE, чтобы удалить все завершающие пробелы.

Например,

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

Спасибо, 'trim' работает для меня, это странно, потому что значения были вставлены из скрипта, не содержащего пробелов! –

-1

Попробуйте

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

Это работает! Спасибо –

0

Поскольку это NVARCHAR2 пытаются поставить заглавную N перед строкой, как так = N'Cardiologue».

+0

Это не работает –