2012-03-04 41 views
1

關於SQL Server 2005中,我該如何合併這個語句如果選擇返回null當前時間 -只有在SQL Server合併字段獲取當前時間

select top 1 OrderDate as OldestOrderDate 
from ordersview 
ORDER BY OldestOrderDate 

訂購日期爲類型datettime的。

+2

爲什麼沒有'ORDER BY'的'top 1'?請不要告訴我你的觀點是'選擇百分之百......命令......'? – 2012-03-04 22:25:42

+0

PS如果你的視圖確實有'TOP 100 PERCENT ... ORDER BY ...'請刪除它並閱讀(我剛剛在幾天前發佈了關於這件事的博客):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 – 2012-03-04 22:39:16

+0

別擔心,我是意識到視圖不是有序的!謝謝。 – Baz 2012-03-05 13:59:37

回答

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並只需要時間藥水,那麼我該怎麼做? - 巴茲

在這種情況下,請嘗試this

+0

但是如果我想將OldestOrderDate和getdate都轉換成時間藥水,那我該怎麼做? – Baz 2012-03-05 13:58:29

-1

嘗試以下操作:

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

這將返回訂購日期,如果它不爲空,否則將返回當前日期。

Coalesce從其參數中返回第一個非空值。

+4

如果表是空的,你什麼也得不到 – 2012-03-04 21:56:21

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

啊,當我遇到這個問題時,我沿着Mosty Mostacho的回答去了,但轉換爲使用MAX() - 事後很明顯! - 要好得多。但說實話,我並沒有得到那麼複雜的東西。爲什麼派生表?爲什麼'聯盟'? 'COALESCE(MAX(OrderDate),GETDATE())'應該工作得很好。 – 2013-10-17 02:23:37

+0

@AndriyM你希望我記得去年三月我在抽菸嗎? – 2013-10-17 12:49:35