【问题标题】:SQL cast string with multiple decimals to integerSQL将具有多个小数的字符串转换为整数
【发布时间】:2012-08-16 19:36:48
【问题描述】:

使用 SQLite3,我试图通过将 TEXT 字符串转换为 INTEGER 来对结果进行排序。这是我的查询:

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

“部分”列是 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 会将其转换为什么值,结果如何排序?目前它似乎正在按我的意愿订购东西,但想避免任何不可预见的错误。

【问题讨论】:

    标签: sql casting sqlite sql-order-by


    【解决方案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)。

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

    【讨论】:

    • 谢谢,很好的回答,感谢您将我指向相关文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多