2010-08-05 186 views
2

我的一個表列的命名爲「的setDate」類型的日期時間看起來就像是:如何自定義日期格式

2010-08-02 02:55:58.420 

從應用程序的日期時間格式看起來:

2/11/2010 

的問題是:

我通過應用程序將SQL查詢傳遞給數據庫。該查詢有WHERE子句 ,它將SetDate與來自應用程序的日期進行比較。

的setdate列載這種格式:2010-08-02 02:55:58.420
從應用程序傳遞日期進行格式如下:3/12/2010

我只需要兩個日期不受時間2010-08-023/12/2010比較。
由於它們的格式不同,我從數據庫中沒有得到任何記錄。

我正在使用C#和T-SQL。

任何想法?

+1

應用程序不允許您發送參數化查詢嗎? – 2010-08-05 12:56:19

+1

你如何在你的應用程序中構建查詢?存儲過程?參數化查詢?... – Jaime 2010-08-05 12:56:52

+0

在我的情況下,我暫時對查詢進行了硬編碼。 – user311509 2010-08-05 13:18:41

回答

0

試着這麼做:

SELECT 
    * 
FROM 
    YourTable 
WHERE 
    RTRIM(CONVERT(CHAR(19), SetDate, 101)) = '3/12/2010' 
+0

通過在列上運行coverage而不是傳入值,索引不可用。另外,如果要將日期作爲字符串進行比較,那麼使用語言中立格式(例如YYYYMMDD)會更好,它將再次指向傳入值的轉換。 – 2010-08-05 13:45:43

+0

我不知道索引問題,謝謝指出。但是,如果查詢需要獲取特定日期的記錄,不管時間如何,我認爲您仍然需要對列和傳入值進行轉換。否則,您需要查詢同一天的最短日期/時間和最大日期/時間之間的項目(這可能會更好,因爲您可以利用索引)。 – 2010-08-05 13:56:35

+0

謝謝,實際上這個解決方案爲我工作! – user311509 2010-08-05 13:58:25

0

在你Where子句,您可以使用DateTime類DateTime.Now.DateDate成員。它返回沒有時間的日期。

只要你使用日期對象(.net或SQL服務器),格式並不重要,因爲你的工作是將字符串解析爲對象或反向,在內部格式是不相關的。

2

您是否使用SqlCommand來運行您的查詢?

是嗎?還可以爲你的用戶/系統輸入使用SqlParameters。

var setDate = DateTime.Now(); 

using (SqlCommand command = new SqlCommand("SELECT * FROM TableX WHERE SetDate > @SetDate", connection)) 
{ 
    // Add new SqlParameter to the command. 
    command.Parameters.Add(new SqlParameter("@SetDate", SqlDbType.DateTime, setDate)); 
    // Read in the SELECT results. 
    SqlDataReader reader = command.ExecuteReader(); 
    //More code 
} 
1

對於數據庫中的DATETIME WHERE子句,您需要做類似這樣的事情。 CONVERT(DATETIME,CONVERT(VARCHAR(11),'2010-08-02 02:55:58.420'))

0

如果可能,從代碼運行DB查詢的最佳方法是調用存儲過程。但是,無論您是否這樣做,您都需要使用根據需要初始化的對象SqlParameter

DateTime dateToCheck = DateTime.Now; 
using(SqlCommand cmd //Set Command Here) 
{ 
    cmd.CommandType = SqlCommandType.Procedure; 
    //Doing this from memory, but that line should be pretty close 
    cmd.Parameters.AddWithValue("@dateToCheck", dateToCheck); 

    //Continue with call to DB as normal 
} 

一個不在這裏,有些人做他們SqlParameter對象指定爲「日期時間」的類型,但我從來沒有這樣做,到現在也沒有回來咬我,還沒有。我相信(再次,在這裏使用內存),如果您使用的是System [。]類型,SqlParameter可以自動將其分配給正確的Sql類型。所以傳遞一個字符串可能仍然會產生一個字符串,但傳入一個DateTime將產生一個DateTime。