8 Stimmen

Typisierungsproblem

In der folgenden Abfrage ist das Ergebnis von 1/2 immer Null, obwohl es 0,5 sein sollte. Können Sie mir bitte sagen, wie ich die beiden int-Spalten in float/double umwandeln kann?

SELECT 1/2, total, sb_ondate, likes
  FROM (
      SELECT sb_ondate, COUNT(*) AS total,
             STRFTIME("%w",sb_ondate) AS weekDay,
             COUNT(CASE WHEN sb_reaction = 'like' THEN sb_id END) AS likes
        FROM diet
    GROUP BY weekDay) AS f;

Danke.

14voto

mechanical_meat Punkte 154171

Gießen Sie einen der beiden Divisoren als real:

SELECT 1 / CAST(2 AS REAL),...

Beispiel einer interaktiven Python-Sitzung:

>>> import sqlite3
>>> c = sqlite3.connect(':memory:')
>>> c.execute("create table t (a int,b int);")

>>> c.execute("insert into t values (1,2)")

>>> conn.execute("select a / cast(b as real) from t").fetchone()
(0.5,)

6voto

Samuel Neff Punkte 70231

Fügen Sie .0 zu einer der Konstanten hinzu:

sqlite> select 1/2;
1/2
----------
0
sqlite> select 1.0/2;
1.0/2
----------
0.5

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X