Флаг NULLS LAST в Denodo, MemSQL, Spark, VectorWise и XtremeData

Я делаю псевдо-ORM для личного проекта и составляю список проверок совместимости для более чем 20 различных диалектов SQL.

В настоящее время я занимаюсь исследованием того, поддерживает ли диалект флаг NULLS LAST, т.е. при сортировке таблицы нуль выходит как последний элемент, например 1, 2, 3, 4, null вместо null, 1, 2, 3, 4.

У меня есть результаты для таких языков, как DashDB/MySQL/MSSQL и т. д. (да, они предлагают NULL LAST), однако для следующих диалектов мне не удалось найти нуль-последнюю возможность:

  1. Денодо

  2. МемSQL

  3. Искра

  4. ВекторМудрый

  5. XtremeData

В вашем ответе будет достаточно простого «да» или «нет», однако, если бы вы также могли написать запрос о том, как выполнить операцию NULL LAST, это тоже было бы здорово!


person theGreenCabbage    schedule 23.08.2016    source источник


Ответы (1)


Я проверил на MemSQL, и оказалось, что синтаксис NULLS LAST не поддерживается. Тем не менее, вы можете добиться этого, выполнив что-то вроде этого:

SELECT * FROM foo ORDER BY IFNULL(bar, MAGIC_VALUE) ASC

Измените MAGIC_VALUE, чтобы он сортировался последним/первым в зависимости от данных в столбце. Если у вас все в порядке с перфомансом, вы можете изменить значение таким образом, чтобы, если оно не равно нулю, значение всегда начиналось с префикса, который сортируется выше, а если он равен нулю, значение сортируется ниже префикса.

То же самое можно использовать для реализации NULL FIRST.

person Carl Sverre    schedule 23.08.2016
comment
Благодарю вас! Знаете ли вы другие четыре диалекта, может ли это работать? - person theGreenCabbage; 24.08.2016
comment
Должен работать для Spark, не знаю о других. - person Carl Sverre; 25.08.2016