2012-03-04 2 views
1

Что касается Sql Server 2005, как я сливаться это утверждение с текущим временем, если это выберите возвращает значение NULL -Coalesce поле, получая текущее время только в SQL Server

select top 1 OrderDate as OldestOrderDate 
from ordersview 
ORDER BY OldestOrderDate 

OrderDate имеет тип datettime.

+2

Почему у вас есть 'top 1' без' ORDER BY'? Пожалуйста, не говорите мне, что ваше мнение «ВЫБРАТЬ ТОП 100 ПРОЦЕНТОВ ... ЗАКАЗАТЬ ...»? –

+0

PS, если у вашего представления есть «ТОП 100 ПРОЦЕНТОВ ... ЗАКАЗАТЬ ...», пожалуйста, удалите его и прочитайте это (я только что пришел в блог об этом самом деле несколько дней назад): http: //www2.sqlblog. com/blogs/aaron_bertrand/archive/2012/02/28/why-people-think-some-sql-server-2000-behaviors-live-on-12-years-later.aspx –

+0

Не беспокойтесь, я что представления не упорядочены! Спасибо. – Baz

ответ

4

Это, как вы coalesce this statement:

coalesce(
    (select top 1 OrderDate as OldestOrderDate from ordersview), 
    getDate()); 

Если вы хотите только временную часть:

coalesce(
    (select top 1 OrderDate as OldestOrderDate from ordersview), 
    convert(varchar(10), getdate(), 8)); 

Вот example

Но что, если я хотел, чтобы преобразовать как OldestOrderDate и getdate только на время зелье, что мне тогда делать? - Баз

В этом случае попробуйте this.

+0

Но что, если я захочу преобразовать как OldestOrderDate, так и getdate в то время, когда я появляюсь, что делать? – Baz

-1

Попробуйте следующее:

select top 1 coalesce(OrderDate, getdate()) as OldestOrderDate from ordersview 

Это вернет OrderDate, если не равно нулю, в противном случае он возвращает текущую дату.

Coalesce возвращает первое ненулевое значение из своих утверждений.

+4

Если стол пуст, вы ничего не получите –

2
SELECT OldestOrderDate = MAX(COALESCE(OrderDate, GETDATE())) 
FROM (SELECT OrderDate = MAX(OrderDate) FROM dbo.ordersview UNION ALL SELECT NULL); 
+0

Ах, когда я столкнулся с этим вопросом, я пошел на ответ Мости Мостачо, но переход к использованию MAX() - настолько очевиден в ретроспективе! - намного превосходит. Но, честно говоря, я не получаю такого осложнения. Почему производная таблица? Почему «UNION ALL»? 'COALESCE (MAX (OrderDate), GETDATE())' должен работать нормально. –

+0

@ AndriyM вы ожидаете, что я вспомню, что я курил в марте прошлого года ??? –

Смежные вопросы