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

标签 sql casting sqlite sql-order-by

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

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

“节”列是文本,由层次结构/规范标识符组成,即 1.2.1,其中每个小数反射(reflect)层次结构中的另一个深度级别。我希望我的结果按顺序返回(即 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 将其转换为什么值,以及结果将如何排序?目前似乎正在按我想要的方式排序,但希望避免任何不可预见的错误。

最佳答案

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

在 SQL Lite 的转换中,它将看起来像整数的字符串的初始段转换为整数。因此,cast('1.2.1' as int) 结果为整数 1

它对于数字的行为类似,因此 cast('1.2.1' as real) 会产生值 1.2

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

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

关于SQL 将具有多个小数的字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994228/

相关文章:

mysql - 获取两个表中的单词数

casting - 如何安全地、惯用地在数字类型之间进行转换?

c - 德尔福指针类型转换

SQL pivot 并填充 NULL 值

android - 在图书馆项目中使用 Room DB

java - 存储JSON对象: SQLite vs serialization to disk

mysql - 对三个表进行计数和求和,获取用户信息及其点赞数

php - mysql 基于时间戳计数?

sql - 如何在数据库中表示一个实体的许多相似属性?

c++ - 如何将 C++ 类转换为内部类型