2011-04-03 98 views
0

大家好我有以下在Visual Studio中使用查詢生成器進行的查詢。ASP.Net SQL日期在今天之後

SELECT Schd_ID, Schd_Date, Schd_Avaliable, Schd_Nights, Schd_Price, Accom_ID 
FROM Schedule 
WHERE (Schd_Avaliable = 'Yes') AND (Accom_ID = Accom_ID) 

我想補充另一個WHERE語句這增加了在那裏Schd_Date是今天的日期後,任何想法?

+0

什麼RDBMS和版本?什麼數據類型是'Schd_Date'? – 2011-04-03 16:53:35

回答

1

如果這是SQL Server,則可以使用GETDATE()函數返回當前的日期和比較反對:

SELECT 
    Schd_ID, Schd_Date, Schd_Avaliable, Schd_Nights, Schd_Price, Accom_ID 
FROM 
    Schedule 
WHERE 
    (Schd_Avaliable = 'Yes') 
AND 
    (Accom_ID = Accom_ID) 
AND 
    (Schd_Date > GETDATE()) 
+0

抱歉,重複的答案。當我寫答案時,你一定已經發布了這個。 – tugberk 2011-04-03 16:40:52

0
SELECT Schd_ID, Schd_Date, Schd_Avaliable, Schd_Nights, Schd_Price, Accom_ID 
FROM Schedule 
WHERE (Schd_Avaliable = 'Yes') AND (Accom_ID = Accom_ID) AND (GETDATE() < Schd_Date) 

這應該工作

0

我想這個表達式可以作爲表示當前日期的日期,格式爲yyyy-mm-dd(不含小時,分鐘和秒)。

(Datepart('yyyy',getdate())+ '-' +Datepart('m',getdate())+ '-' + Datepart('d',getdate()))

因此

SELECT Schd_ID, Schd_Date, Schd_Avaliable, Schd_Nights, Schd_Price, Accom_ID 
FROM Schedule  
WHERE (Schd_Avaliable = 'Yes') AND (Accom_ID = Accom_ID) AND 
     (Schd_Date >= (Datepart('yyyy',getdate())+ '-' + 
        Datepart('m',getdate())+ '-' + 
        Datepart('d',getdate()))) 
+0

'DATEPART'返回'int',當兩種類型混合在一個表達式中時,它的優先級高於'varchar'。因此,引擎會試圖將「 - 」作爲一個整數來解釋,並且自然會失敗。結論:您需要將每個DATEPART的結果轉換爲字符串。 – 2011-04-03 18:24:03

+0

@Andriy:你當然是對的。我會刪除這個答案,因爲OMG Ponies的答案更有效率和更好(我甚至會進一步強調這一點,因爲我必須添加正確的CAST或CONVERT調用來使混亂的邏輯起作用 – 2011-04-03 18:45:37

4

假設SQL Server中,GETDATE()函數返回的日期和時間的聲明在運行:

WHERE Schd_Date > GETDATE() 

使用以下發現日期大於當前日期的午夜:

WHERE Schd_Date > DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 

但是,CURRENT_TIMESTAMP是ANSI獲取數據庫中當前日期和時間的方法。除此之外,數據庫之間的日期功能並不一致,因此您必須告訴我們您正在處理的是哪些更好的答案。

+0

+1這是一個更多高效和清潔的方式來產生與我的解決方案相同的結果。 – 2011-04-03 17:34:34