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, ...

但是通过前面提到的带有 cast 的查询,它现在似乎可以正确排序,如下所示:

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 回答