Как управлять сложной сортировкой в ​​SQL? - PullRequest
0 голосов
/ 02 марта 2020

Мне нужна сортировка по датам с частичными датами. У меня есть таблица со следующими столбцами.

Day     Month   Year
--      ----    -----
NULL    03      1990
26      10      1856
03      07      Null
31      NULL    2018
NULL    NULL    NULL 

У меня есть таблица, в которой одним из столбцов является Дата, где я объединяю три вышеупомянутых столбца и отображаю даты.

Сейчас Я хочу сортировать по этому столбцу даты в сетке. Порядок сортировки дат должен быть следующим:

[blank date]
22 [day]
March
April 12
May
July 29
August
September
September 14
October
1948
October 1948
October 1 1948
July 1976
1977
July 1977
July 23 1977
December 1981
December 29 1981

Я пробовал разные способы добиться этого. Но я не могу получить желаемый результат. Ниже приведены некоторые способы, которые я применил.

Я попытался отсортировать, создав хранимую процедуру, в которой я создаю целую дату, объединяя 3 столбца и преобразовывая их в стандартные форматы даты и сравнивая значения. Я также попытался создать вычисляемое свойство в модели и соответствующим образом отсортировать их.

Как я могу сделать это в SQL?

1 Ответ

1 голос
/ 02 марта 2020

Я думаю, что вы могли бы сделать:

order by coalesce(year, '0000'), coalesce(month, '00'),  coalesce(day, '')

Вы можете быть более явным, но это ставит значения NULL перед другими значениями в столбце.

Примечание: Это использует стандартный оператор SQL для конкатенации строк. Не все базы данных поддерживают это, поэтому вам может понадобиться настроить код для вашей базы данных.

...