2009-04-28 11 views
2

Mit dem folgenden Beispiel gespeicherte ProzedurIn MySQL Stored Procedures überprüfen, ob eine lokale Variable

DECLARE Variable DOUBLE; 
DECLARE Variable2 DOUBLE; 
SELECT Something FROM Somewhere INTO Variable; 

SELECT Something FROM SomewhereElse INTO Variable 2; 

SELECT (Variable + Variable2); 

null ist, wenn entweder Variable oder Variable2 NULL sind dann die endgültige SELECT den Wert null zurück, was ich möchte, dass, wenn sie sind null sie sollten in 0,00 vor der endgültigen SELECT konvertiert werden, wie machst du das? Ich habe bereits versucht,

SELECT 0.00 INTO Variable WHERE Variable IS NULL; 

nur über die endgültige Auswahl, aber das hat nicht funktioniert.

Antwort

5
SELECT COALESCE(variable, 0) + COALESCE(variable2, 0) 
+0

danke :) + charlimit –

0

Quassnoi ist richtig, aber es ist noch einfacher (und ein bisschen schneller) verschmelzen nur das Ergebnis:

SELECT coalesce(Variable + Variable2, 0); 

Dies funktioniert, weil für fast alle Betreiber, jede Null-Operanden wird die Operation null machen:

select 1 + null ; -- null 
    select null + 1 ; -- null 
    select null + null ; -- null 

In dem Ausdruck: SELECT coalesce(Variable + Variable2, 0); das Ergebnis der Addition Ausdruck Variable + Variable2 ist coalesce erste Argument; Wenn das null ist, gibt coalesce das zweite Argument 0 zurück, andernfalls gibt es den (Nicht-Null-) Wert des ersten Arguments zurück, das die Summe ist, die wir wollen.

Die wenigen Operatoren und Funktionen, die für einen Nulloperanden kein Null zurückgeben, sind solche, die für Nullwerte arbeiten: coalesce, is null, is not null.

Wie untenstehend unter kristof notiert, ist der Wert des Ausdrucks select mit Quassnois Ausdruck unterschiedlich, wenn nur eine Variable null ist: his gibt den Wert der Nicht-Null-Variable zurück, wenn einer null ist; meins wird Null zurückgeben, wenn entweder Variable ist null. Was "richtig" ist, hängt von Ihrer Absicht ab.

+0

Die beiden Lösungen sind nicht identisch, Quassnoi bedeutet, dass, wenn nur eine Variable null ist das Ergebnis ist die andere Variable, das ist das Verhalten, das ich wollte. –

+0

Sie haben Recht, Sir! – tpdi

1

, wenn Sie jede Variable null auf 0 Verwendung von Quassnoi erzielte die Lösung umgewandelt wollen

SELECT COALESCE(variable, 0) + COALESCE(variable2, 0) 

wenn Sie 0 haben wollen, wenn eine Variable null ist, dann verwenden

SELECT COALESCE(variable + variable2, 0) 
Verwandte Themen