在sqlite中将int转换为real

vai*_*war 75 sql sqlite casting division

在sqlite中返回整数值

sqlite> select totalUsers/totalBids from 
(select (select count(*) from Bids) as totalBids , 
(select count(*) from Users) as totalUsers) A;
1
Run Code Online (Sandbox Code Playgroud)

我们可以对结果进行类型转换以获得除法结果的实际值吗?

Nul*_*ion 118

只需将其中一个数字乘以1.0:

SELECT something*1.0/total FROM somewhere
Run Code Online (Sandbox Code Playgroud)

这将给你浮点除法而不是整数除法.

  • 这对我来说不适用于SQLite 3.15 .. @AdamGarner的解决方案确实如此. (3认同)
  • 你真的不应该使用这个技巧,因为开发人员(包括你自己)很容易回来删除看起来多余的代码。最佳实践是按照我下面的建议进行浮动。 (2认同)
  • 这是一个黑客行为。最好、最明确的方法是使用 CAST。在特定情况下这也可能会出错。在基于查询创建表时,我见过类似的事情失败。转换值解决了这个问题。 (2认同)

Ada*_*ner 46

在Sqlite中,整数除以另一个整数将始终向下舍入到最接近的整数.

因此,如果将枚举器强制转换为浮点数:

SELECT CAST(field1 AS FLOAT) / field2
Run Code Online (Sandbox Code Playgroud)

  • 是的,原因很简单。你对你打算发生的事情很明确。并且不要放入依赖于其他开发人员知道为什么乘以 1 的东西。 (3认同)
  • @FelixEdelmann另外,如果您没有明确地将其强制转换为float,您自己甚至可能会忘记为什么拥有该1.0并在某些时候将其删除。它不仅适用于其他开发人员。 (3认同)