Chciałbym posortować wyniki z ostatnimi kolumnami NULL (NULLS LAST
), jak określono w SQL:2003 extension T611. Niestety, SQLite wydaje się nie obsługiwać tego. Czy istnieje sprytne obejście tego problemu?Jak zrobić NULLS OSTATNIEGO w SQLite?
Odpowiedz
Czy to zadziała?
SELECT ....... ORDER BY COALESCE(col1,col2,col3,etc) IS NULL
Jestem trochę zdezorientowany twoim słowem "wszystkie kolumny NULL ostatnie". Jeśli chcesz, aby wszystkie wartości NULL ostatnich w danej kolumnie, użyj tego:
SELECT ....... ORDER BY col1 IS NULL
można zrobić coś takiego udawać:
select * from test
order by case ordercol when null then 1 else 0 end, ordercol
dlaczego nie 'order by case, gdy ordercol ma wartość null, a następnie 0 else 1, ordercol'? ratuje dziwny błąd, gdy ktoś stawia wartości poniżej -100 w ordercol. – mvds
To dobra uwaga. Właśnie napisałem niewyraźny przykład z mojej głowy, ponieważ nie wiemy, jak dane wyglądają. Ale twoja korekcja działa lepiej - zastosowała to! – Blorgbeard
Chociaż trochę jak odpowiedź Blorgbeard, ten wariant nie robi” t dbać o dostarczanie prawidłowej "fałszywej" wartości właściwego typu danych.
ORDER BY CASE WHEN SOMECOL IS NULL THEN 1 ELSE 0 END, SOMECOL
Alternatywnie, nawet jeśli chciał użyć fałszywe wartości, wolałbym ISNULL!
ORDER BY ISNULL(SOMECOL,-9999)
Jak zauważył Michael, SQLite używa IFNULL
. Możesz również użyć uniwersalnej wersji ANSI-SQL COALESCE
.
Drobna korekta Myślę, że ... w SQLite, ISNULL powinno być IFNULL. – Michael
Dzięki @Michael, zaktualizowany o lepsze informacje – RichardTheKiwi
Wpadłem na ten sam problem. I okazało się to może działać:
(nie mogę znaleźć żadnego isnull
funkcję SQLite)
order by ifnull(column_what_you_want_to_sort,'value in case of null')
Czy nie oznacza 'nie ponosi NULL'? – dan04
@ dan04 thx, masz rację – mvds
Myślę, że powinno być 'IS NULL', aby uzyskać ostatnie wartości zerowe: – Blorgbeard