2013-10-01 15 views
10

Mam tabelę tymczasową i jedna z moich kolumn total_amount jest typu całkowitego, a NIE NULL. Podczas sprawdzania danych otrzymałem NULL wartości dla kolumny total_Amount.zamień wartość NULL na wartość pustą lub zero w serwerze sql

Jak zawsze użyłem następującej składni, aby usunąć wartości null, ale niektóre jak wciąż pojawiają się wartości NULL, popraw mnie, jeśli się mylę.

Create table #Temp1 
(
    issue varchar(100) NOT NULL, 
    total_amount int NOT NULL 
) 

To moje zapytanie

Case when total_amount = 0 then 0 
else isnull(total_amount, 0) 
end as total_amount 

Jestem stoi problem w moim innym części.

+0

Czy możesz opublikować całe zapytanie? Chociaż wydaje się, że wszystko jest w porządku, zarówno deklaracja tabeli, jak i to, co wybierasz. –

+0

powinien być w lewo Dołącz do wydania, proszę zamieścić zapytanie – vikas

Odpowiedz

15

Można użyć funkcji łączyć się automatycznie zwracać wartości null jako 0. Składnia jest jak pokazano poniżej:

SELECT COALESCE(total_amount, 0) from #Temp1 
+0

Dzięki Shree, zadziałało. – 0537

1

Należy zawsze wrócić tego samego typu na wszystkich przypadkach warunkiem:

W pierwszym masz charakter i na inny trzeba int.

Można użyć:

Select convert(varchar(11),isnull(totalamount,0)) 

lub jeśli chcesz z rozwiązania:

Case when total_amount = 0 then '0' 
else convert(varchar(11),isnull(total_amount, 0)) 
end as total_amount 
+1

Zmieniłem swój komentarz, musi on zwrócić typ INT. – 0537

+1

Dostarczyłem rozwiązanie, gdy tekst był z ciągiem na wyciągu z przypadku, jeśli chce int: wybierz isnull (totalamount, 0) –

2

Koalescencja() jest najlepszym rozwiązaniem, gdy istnieje wiele kolumn [i]/[lub] v Alues, a ty chcesz pierwszy. Jednak patrząc na książki on-line, optymalizacja zapytania przekształca ją w instrukcję case.

MSDN fragment

Wyrażenie COALESCE jest składniowym skrót wyrażenia przypadków.

Oznacza to, że COALESCE kod (wyrażenie1, ... n) jest przepisany przez optymalizator kwerendy następującego wyrażenia CASE:

CASE 
    WHEN (expression1 IS NOT NULL) THEN expression1 
    WHEN (expression2 IS NOT NULL) THEN expression2 
    ... 
    ELSE expressionN 
END 

Z powiedział, dlaczego nie prosty ISNULL()? Mniej kodu = lepsze rozwiązanie?

Oto pełny fragment kodu.

-- drop the test table 
drop table #temp1 
go 

-- create test table 
create table #temp1 
(
    issue varchar(100) NOT NULL, 
    total_amount int NULL 
); 
go 

-- create test data 
insert into #temp1 values 
    ('No nulls here', 12), 
    ('I am a null', NULL); 
go 

-- isnull works fine 
select 
    isnull(total_amount, 0) as total_amount 
from #temp1 

Last but not least, jak się masz wartości null w kolumnie NOT NULL?

Musiałem zmienić definicję stołu, aby móc skonfigurować test. Kiedy próbuję zmienić tabelę na NOT NULL, to się nie powiedzie, ponieważ wykonuje test niwasu.

-- this alter fails 
alter table #temp1 alter column total_amount int NOT NULL 
0

Try This

SELECT Title from #Movies 
    SELECT CASE WHEN Title = '' THEN 'No Title' ELSE Title END AS Titile from #Movies 

LUB

SELECT [Id], [CategoryId], ISNULL(nullif(Title,''),'No data') as Title, [Director], [DateReleased] FROM #Movies 
0

różnych sposobów, aby zastąpić NULL w serwerze sql

Wymiana wartości NULL przy użyciu:

1. ISNULL() funkcja

2. COALESCE() funkcja

3. case

SELECT Name as EmployeeName, ISNULL(Bonus,0) as EmployeeBonus from tblEmployee 

SELECT Name as EmployeeName, COALESCE(Bonus, 0) as EmployeeBonus 
FROM tblEmployee 

SELECT Name as EmployeeName, CASE WHEN Bonus IS NULL THEN 0 
ELSE Bonus END as EmployeeBonus 
FROM tblEmployee 
1

wymienić puste wartości jako puste: ISNULL('Value','')

Zastąp puste wartości jako 0: ISNULL('Value',0)

Powiązane problemy