使用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将其转换为什么值,以及如何将其作为结果进行排序?它似乎是按照我想要的顺序排序,但是想要避免任何不可预见的错误。
答案 0 :(得分:1)
不同的数据库以不同的方式处理对整数和浮点数的转换。
在SQL Lite的转换中,它将看起来像整数的字符串的初始段转换为整数。因此,强制转换('1.2.1'为int)会产生整数 1 。
对于数字,它的行为类似,因此强制转换('1.2.1'为实数)会导致值 1.2 。
此行为记录在此处(http://www.sqlite.org/lang_expr.html)。
在这种情况下,其他数据库可能会返回错误。