2

SQLite3を使用して、TEXT文字列をINTEGERにキャストして結果を並べ替えようとしています。これが私の質問です:

SELECT id,section FROM contract_sections ORDER BY CAST (section AS int)

'section'列はTEXTであり、階層/正規識別子、つまり1.2.1で構成されます。ここで、各小数は階層内の別のレベルの深さを反映します。結果を順番に返したい(つまり、1.2.8、1.2.9、1.2.10など)。キャストなしで「セクション」列で並べ替えると、次のような結果が得られます。

1.1、1.10、1.2、..。

しかし、前述のキャストを使用したクエリでは、次のように正しく順序付けされているようです。

1.1、1.2、... 1.9、1.10

私の質問は、この文字列をintにキャストした場合、SQLiteはそれをどのような値に変換し、結果としてどのように順序付けられるのかということです。現時点では私が望むように注文しているようですが、予期しないバグを回避したいと考えています。

4

1 に答える 1

1

データベースが異なれば、整数へのキャストと浮動小数点数も異なります。

SQL Liteのキャストでは、整数のように見える文字列の最初のセグメントを整数に変換します。したがって、cast( '1.2.1' as int)は整数1になります。

数値に対しても同様に動作するため、cast( '1.2.1' as real)の結果は値1.2になります。

この動作はここ(http://www.sqlite.org/lang_expr.html)に文書化されています。

この場合、他のデータベースがエラーを返す可能性があります。

于 2012-08-16T19:59:25.610 に答える