Come posso cambiare NULL su 0 quando si ottiene un singolo valore da una funzione SQL?
Domanda
Ho una query che conta il prezzo di tutti gli articoli tra due date. Ecco l'istruzione select:
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Puoi presumere che tutte le tabelle siano state impostate correttamente.
Se seleziono tra due date e non ci sono articoli all'interno di quell'intervallo di date, la funzione restituisce NULL come TotalPrice anziché 0.
Come posso assicurarmi che se non viene trovato alcun record, viene restituito 0 anziché NULL?
Soluzione
La maggior parte dei server di database ha una COALESCE , che restituirà la funzione primo argomento non nullo, quindi quanto segue dovrebbe fare quello che vuoi:
SELECT COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
[modifica]
Solo per chiarire le cose poiché sembra esserci molta discussione su " COALESCE / ISNULL restituirà comunque NULL se nessuna riga corrisponde " ;, prova questa query puoi copiare e incollare in SQL Server direttamente così com'è:
SELECT coalesce(SUM(column_id),0) AS TotalPrice
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)
Si noti che la clausola where esclude tutte le righe da sys.columns dalla considerazione, ma l'operatore 'sum' risulta comunque restituito una singola riga che è nulla, il che si fonde corregge come una singola riga con uno 0.
Spero che questo aiuti a spiegarlo.
Altri suggerimenti
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Questo dovrebbe fare il trucco.
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
SELECT COALESCE(
(SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
, 0)
Se la tabella ha righe nella risposta, restituisce SUM (Prezzo). Se SUM è NULL o non ci sono righe, verrà restituito 0.
Mettere COALESCE (SUM (Prezzo), 0) NON funziona in MSSQL se non viene trovata alcuna riga.
Modifica: sembra che tutti gli altri mi abbiano battuto, ahah
Trovato la risposta.
ISNULL ()
determina cosa fare quando si ha un valore nullo.
In questo caso la mia funzione restituisce un valore nullo, quindi ho dovuto specificare uno 0 da restituire.
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded
BETWEEN @StartDate AND @EndDate)
Puoi usare
SELECT ISNULL (SUM (ISNULL (Price, 0)), 0)
.
Sono sicuro al 99% che funzionerà.
ORACLE / PLSQL:
FUNZIONE NVL
SELECT NVL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
Questa istruzione SQL restituisce 0
se SUM (Prezzo)
restituisce un valore nullo. Altrimenti, restituirebbe il valore SUM (Price)
.
Il modo più semplice per farlo è semplicemente aggiungere zero al tuo risultato.
cioè.
$A=($row['SUM'Price']+0);
echo $A;
spero che questo aiuti !!