преобразование int в реальное в sqlite

54

Разделение в sqlite возвращает целочисленное значение

sqlite> select totalUsers/totalBids from 
(select (select count(*) from Bids) as totalBids , 
(select count(*) from Users) as totalUsers) A;
1

Можно ли придумать результат, чтобы получить реальное значение результата разделения?

Теги:
casting
division

4 ответа

90
Лучший ответ

Просто умножьте одно из чисел на 1.0:

SELECT something*1.0/total FROM somewhere

Это даст вам деление с плавающей запятой вместо целочисленного деления.

  • 0
    также работает для преобразования строки в число
  • 3
    Это не работает для меня с SQLite 3.15. Решение от @AdamGarner делает.
Показать ещё 1 комментарий
30

В Sqlite деление целого на другое целое будет всегда округлять до ближайшего целого числа.

Поэтому, если вы перечислите свой счетчик на float:

SELECT CAST(field1 AS FLOAT) / field2
  • 0
    Так лучше ли приводить int вручную к float или умножать на 1.0 (как ответил @NullUserException)?
  • 0
    Да, по одной простой причине. Вы ясно говорите о том, что вы собираетесь сделать. И не вкладывать в то, что полагается на других разработчиков, зная, почему вы умножили на 1.
Показать ещё 1 комментарий
7
select cast ( ( select 1 ) as real );

https://www.sqlite.org/lang_expr.html#castexpr

1

или если вы хотите обновить столбец на основе текстового столбца:

UPDATE table_with_fields SET real_field=cast(field_with_txt AS real)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню