2013-12-16 38 views
2

我有秩序的問題。例如,我有三個詞,波蘭語:「Zzzz」,「Żubr」和「Zajawka」。通過使用波蘭語的字母順序

他們應該是有點像說:

Zajawka 
Zzzz 
Żubr 

原因ž封信是拋光alfabet Z後。但排序對我說:

Zajawka 
Żubr 
Zzzz 

所以它把字母Z像ž信...

+0

什麼是你的DBMS? –

+0

我的數據庫管理系統是MySQL –

回答

4

我假設數據庫未與波蘭整理創建。但是你可以在排序時始終指定它:

SELECT name 
FROM  mytable 
ORDER BY name COLLATE SQL_Polish_Cp1250_CS_AS_KI_WI 

編輯:
我誤讀了標籤,並以爲這就是SQL Server中。如果你有不同的RDBMS,請在評論中回答@RaphaëlAlthaus的問題。

+0

我使用Heidi的MysqL SQL –

+0

儘管MySQL似乎不支持波蘭的整理,但同樣的語法也適用於此。看看[這個列表](http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html) - 也許東歐的一個將適用,但我承認我沒有檢查了這個。 – Mureinik

+0

有一個'utf8_polish_ci'字符集,但我在「是否對波蘭字符進行排序」中找到了不同的答案...... –

2

從數據庫中提取記錄後,您必須重新排序,因爲它將Ż視爲英文字符z。

您需要編寫自定義重新排序方法,您只需在z之後對其進行排序。

您可以獲取除Ż以外的所有記錄。

然後在另一個查詢中提取所有隻有Ż的記錄,並在預取列表的末尾附加這個列表。

選擇不從客戶端具有Z字符的名稱 選擇*如果client.name!= ž AND(我的過濾器)

SELECT * FROM客戶在哪裏client.name == Z,它們記錄 AND(我的過濾器)

代碼隱藏(C#):

SqlDataReader dr = cmd.ExecuteReader(); 

      List<Product> myList = new List<Product>(); 

     while (dr.Read()) 
     { 
      myList.Add(GetFromReader(dr)); 
     } 

     if (dr.NextResult()) 
     { 
      while (dr.Read()) 
      { 
       myList.AddRange(GetFromReader(dr)); 
      } 
     }