2011-11-06 105 views
0

我正在使用SQL Server MS。 我無法寫這個劇本:SQL - 計算列使用ISNULL,DATEDIFF和GETDATE

CREATE VIEW rental_view 
AS SELECT 
    m.movie_id, movie_name, co.copy_id, f.format_id, format_name, cu.customer_id, 
(first_name + ' ' + surname) AS customer_name, rental_id, rental_date, 
return_date, ISNULL(return_date, DATEDIFF(dd, rental_date, GETDATE())) 
AS rental_duration 
FROM movie AS m INNER JOIN copy AS co 
ON m.movie_id = co.movie_id 
INNER JOIN format AS f 
ON co.format_id = f.format_id 
INNER JOIN rental 
ON co.copy_id = rental.copy_id 
INNER JOIN customer AS cu 
ON rental.customer_id = cu.customer_id 

的目標,這是建立在選擇指定的列的視圖。指定的最後一列是一個計算列,它應該計算出租超出其出租日期的天數(僅當return_date值爲NULL時)並將其顯示爲INT。 據我所知,我在正確的軌道上,但顯然不是,因爲當執行該列中顯示的值是DATATIME數據類型值,並沒有任何意義。

感謝任何幫助,我可以得到。

回答

1

也許像這樣的東西會爲你工作。如果該值爲NULL,則比較假日期01-01-1900,然後返回DATEDIFF或零值。

CASE ISNULL(return_date,'19000101') 
    WHEN '19000101' THEN DATEDIFF(dd, rental_date, GETDATE()) 
    ELSE 0 END 
+0

我不能夠感謝你,完美的作品:) – Owen