SQL将具有多个小数的字符串转换为整数

时间:2012-08-16 19:36:49

标签: sql casting sqlite sql-order-by

使用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等)。如果我只是在没有演员表的情况下通过'section'列进行排序,我得到的结果如下:

1.1, 1.10, 1.2, ...

但是使用上述带有强制转换的查询,它现在似乎正确排序,如:

1.1, 1.2, ... 1.9, 1.10

我的问题是,如果我将此字符串转换为int,SQLite将其转换为什么值,以及如何将其作为结果进行排序?它似乎是按照我想要的顺序排序,但是想要避免任何不可预见的错误。

1 个答案:

答案 0 :(得分:1)

不同的数据库以不同的方式处理对整数和浮点数的转换。

在SQL Lite的转换中,它将看起来像整数的字符串的初始段转换为整数。因此,强制转换('1.2.1'为int)会产生整数 1

对于数字,它的行为类似,因此强制转换('1.2.1'为实数)会导致值 1.2

此行为记录在此处(http://www.sqlite.org/lang_expr.html)。

在这种情况下,其他数据库可能会返回错误。