SQL Server, эквивалентный ПУСТЫМ УКАЗАТЕЛЯМ Oracle СНАЧАЛА?

"Если бы Вы могли бы возвратиться и перестроить эту систему, что Вы сделали бы по-другому"

46
задан OMG Ponies 22 September 2009 в 17:05
поделиться

6 ответов

Вы можете проделать некоторую уловку:

ORDER BY (CASE WHEN [Order] IS NULL THEN 0 ELSE 1 END), [Order] 
67
ответ дан 26 November 2019 в 20:20
поделиться

Оператор Use Case / When, например:

ORDER BY (case WHEN ColINT IS NULL THEN {maxIntValue} ELSE ColINT END) DESC

ORDER BY (case WHEN ColVChar IS NULL THEN {maxVCharValue} ELSE ColVChar END) DESC

ORDER BY (case WHEN ColDateT IS NULL THEN {maxDateTValue} ELSE ColDateT END) DESC

... и т. Д.

или даже лучше, поскольку вам все равно, какой у вас тип столбца и максимальное значение .

ORDER BY (case WHEN ColAnyType IS NULL THEN 1 ELSE 0 END) DESC, ColAnyType DESC
5
ответ дан 26 November 2019 в 20:20
поделиться

Если у вас есть строки в вашей таблице с датами меньше, чем сейчас, и другие строки с датами больше, чем сейчас, ваши NULLS появятся в середине списка. Вместо этого вам, вероятно, следует использовать значение, которое никогда не будет сортироваться в середине вашего списка.

Order by IsNull (Date_Sent, '17530101'

4
ответ дан 26 November 2019 в 20:20
поделиться
ORDER BY
  COALESCE(POSTING_DATE,'1900-01-01 00:00:00.000')
 ,OTHER_FIELDS
3
ответ дан 26 November 2019 в 20:20
поделиться

Это альтернативный способ, когда вы хотите настроить отображение пустых значений в порядке сортировки. Отмените столбец и измените порядок сортировки. К сожалению, вам понадобится CAST dateTime columns.

ORDER BY -CAST(date_sent as int) ASC
3
ответ дан 26 November 2019 в 20:20
поделиться

Насколько мне известно, вы не можете это контролировать. И похоже, что у вас правильный подход с ISNULL .

Со строками я использовал ISNULL (field, '') для той же цели.

1
ответ дан 26 November 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: