2014-04-09 120 views
1

形成一個MS SQL Server SELECT語句來填充特定的帶有EMPTY字符串的VIEW字符串首先,感謝所有接受這個問題答案的人。如何根據條件

我在SQL Server 2012 Express中有一個簡單的SQL Server視圖(在現有的表上)。爲了(印刷)報告目的,該視圖有兩列興趣點。

這兩列的數據類型都是DATETIME。一個是Departure日期時間,另一個是Arrival日期時間。

現在,我的問題是這個人。 SELECT子句的語法是什麼,這樣如果其中任何一個datetime列不等於今天,視圖可以創建一個新的列作爲空白字符串?

因此,例如,如果ArrivalDate不等於今天,我希望不只是返回存儲在ArrivalDate,中的日期,而是返回一個空白字符串。

我已經包含視圖的SELECT語句,目前的情況是:

SELECT  
    bookingRef, custName, departureDateTime, arrivalDateTime 
FROM  
    dbo.Bookings 
WHERE  
    (departureDateTime BETWEEN CAST(GETDATE() AS DATE) 
    AND DATEADD(DAY, 1, CAST(GETDATE() AS DATE))) 
    OR (arrivalDateTime BETWEEN CAST(GETDATE() AS DATE) 
    AND DATEADD(DAY, 1, CAST(GETDATE() AS DATE))) 

我是正確的記住這個任務需要的變量/參數利用???

回答

2

右首先字符串數據類型可以具有空字符串,但Date數據類型不能具有空日期值,它可以具有日期值或NULL值。

您可以返回一個虛擬日期,如1900-01-01或NULL。但是在日期時間/日期列中不能有空字符串。

因此,你可以做這樣的事情......

SELECT bookingRef 
     , custName 
     , CASE WHEN CAST(departureDateTime AS DATE) <> CAST(GETDATE() AS DATE) 
       THEN NULL 
       ELSE departureDateTime END AS departureDateTime 
     , CASE WHEN CAST(arrivalDateTime AS DATE) <> CAST(GETDATE() AS DATE) 
        THEN NULL 
       ELSE arrivalDateTime END AS arrivalDateTime 
FROM  dbo.Bookings 
WHERE CAST(departureDateTime AS DATE) = CAST(GETDATE() AS DATE) 
    OR CAST(arrivalDateTime AS DATE) = CAST(GETDATE() AS DATE) 

或者你可以有日期時間列在字符串/字符數據類型退回,那麼你就可以在你的最終結果空字符串。你可以做這樣的事情...

SELECT bookingRef 
     , custName 
     , CASE WHEN CAST(departureDateTime AS DATE) <> CAST(GETDATE() AS DATE) 
       THEN '' 
       ELSE CONVERT(VARCHAR(19), departureDateTime, 120) 
       END AS departureDateTime 
     , CASE WHEN CAST(arrivalDateTime AS DATE) <> CAST(GETDATE() AS DATE) 
        THEN '' 
       ELSE CONVERT(VARCHAR(19), arrivalDateTime, 120) 
       END AS arrivalDateTime 
FROM  dbo.Bookings 
WHERE CAST(departureDateTime AS DATE) = CAST(GETDATE() AS DATE) 
    OR CAST(arrivalDateTime AS DATE) = CAST(GETDATE() AS DATE) 
+0

原諒我,我想我的問題沒有擺正。 :)我知道NULL部分的返回(我來自C++背景)。但是,VIEW現在返回表中的所有行,而不是隻有具有相等於今天的departureDateTime或arrivalDateTime的行。 – BuddhaLight

+0

謝謝M.Ali。 :)我設法添加WHERE子句並使用CASE條件語句來獲得我想要的。做得好!並感謝你! – BuddhaLight

+0

我以爲你想要返回所有的行,只是將它們替換爲空字符串,如果日期不等於今天的日期我已經加回今天的日期。沒有問題很高興幫助:) –