-1

以下のSQLステートメントから、1111111、2222、33333、4444などのcnumberを昇順で表示したいと思います。

   SELECT 
      * 
   FROM 
       BIBLEBOOK 
   INNER JOIN 
       CHAPTER ON (BIBLEBOOK.BIBLEBOOK_Id=CHAPTER.BIBLEBOOK_Id) 
   INNER JOIN 
       VERS ON(CHAPTER.CHAPTER_Id=VERS.CHAPTER_Id) 
   WHERE 
       BIBLEBOOK.bnumber='2' 
   ORDER BY
       cnumber ASC;*

しかし、SQLの結果を実行すると

ここに画像の説明を入力

111111...10101010....111111...12121212....131313....22222222

1..2..3..4..5..6. のような結果を表示するにはどうすればよいですか?

4

3 に答える 3

1

テキスト データ型を数値型に変換するときに、数値による並べ替えを強制できます。明示的またはこの暗黙的なキャストを使用する

 ORDER BY cnumber * 1 ASC
于 2013-10-21T06:24:50.847 に答える
1

テーブルを記述する DDL が含まれていませんでしたがcnumber、列として定義されているように見えるためVARCHAR、辞書順に並べ替えられています。実際にNUMERICデータのみを含み、常にそのように使用される場合は、列のデータ型を変更することをお勧めします。

それができない場合は、クエリでいつでも明示的にキャストして、数値で並べ替えることができます。

SELECT * 
FROM BIBLEBOOK 
INNER JOIN CHAPTER ON (BIBLEBOOK.BIBLEBOOK_Id=CHAPTER.BIBLEBOOK_Id) 
INNER JOIN VERS ON(CHAPTER.CHAPTER_Id=VERS.CHAPTER_Id) 
WHERE BIBLEBOOK.bnumber='2' 
ORDER BY CAST (cnumber AS NUMERIC) ASC;
于 2013-10-21T06:26:12.400 に答える
0

cnumber数値ではなくテキストに設定されているようです。CONVERT関数を使用して、テキスト 1 の代わりに標準の数値比較を使用して順序付けを強制してみてください。

ORDER BY
    CONVERT(cnumber, INTEGER) ASC;*

しかし、列のデータ型の変更を検討することから始めます。そもそも数値データを扱うのになぜテキストに設定されているのですか?

于 2013-10-21T06:24:25.503 に答える