1

大文字と小文字を区別せずにロケールのアルファベット順でデータセットを注文する方法はありますか? 「COLLATE LOCALIZED」、「COLLATE NOCASE」を見つけましたが、「COLLATE LOCALIZED NOCASE」はエラーを示します (逆の順序でも)。

返信ありがとうございます。

4

2 に答える 2

0

簡単な方法は見つかりませんでした。正規化されたデータを含む追加の並べ替えテーブル列を作成しました (ここに記載)。正規化されたテーブルの列名のプレフィックスの定数を作成しました:

public static final String ASCII_PREFIX = "ascii_";

作成されたテーブル (テキスト列の場合、プレフィックス付きの列をもう 1 つ作成します):

String sql = "CREATE TABLE IF NOT EXISTS " + tableName + " (";
for( columnModel column: table.columns ) {
  if( column.position > 0 ){  sql += ", ";  }
  sql += column.dbName + " " + column.dbType;
}
for( columnModel column: table.columns ) {
  if( column.dbType.equals("TEXT") ) {
    sql += ", " + ASCII_PREFIX + column.dbName + " " + column.dbType;
  }
}
sql += ")";
db.execSQL(sql);

テーブル データの入力を変更しました (特別な列に正規化されたデータを追加):

//...cycle for data filling...
ContentValues values = new ContentValues();
for( columnModel column: table.columns ) {
     values.put(column.dbName, valueStr);
     if( column.dbType.equals("TEXT") ){
      values.put(ASCII_PREFIX + column.dbName, normalize(valueStr));
     }
}
db.insert(tableName, null, values);

次に、テキスト列の代わりに並べ替えます。

//... in method for sorting...
String orderBy;
....                  
if( column.dbType.equals("TEXT") ) {
    orderBy = ASCII_PREFIX + column.dbName;
}else {
    orderBy = column.dbName;
}
于 2016-04-20T13:22:21.700 に答える