2015-10-09 57 views
2

我有一個2列稱爲MEDECIN表如下:爲什麼Oracle XE數據庫中的WHERE子句在與字符串比較時不起作用?

 
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';我得到no rows selected!這怎麼發生?正如你所看到的,有很多行,其中SPECIALITE = 'Cardiologue'

+0

可能是你可以在這裏找到答案出來的東西:http://stackoverflow.com/questions/4401043/oracle-text-will-not-work-with-nvarchar2-what -else-might-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

它不起作用 –

相關問題