2013-09-24 61 views
-1

我有下面的代碼:SQL CONVERT函數在SQL Server的工作,但不是在應用

… 
var sqlCom = 
      new SqlCommand("SELECT TOP 1 …,CONVERT(date,dtetme) AS dtetme… FROM class c WHERE [email protected];", sqlCon); 
… 

     try 
     { 
      while (sdr.Read()) 
       for (int i = 0; i < 11; i++) 
        rslt[i] = sdr.GetValue(i).ToString(); 
     } 

dtetmesmalldatetime型我SQL Server 2012的數據庫。我只想從中提取日期,這就是爲什麼我使用CONVERT(date,dtetme)函數。在SQL服務器上運行時,它只會按預期返回日期,但在應用程序中,它將使用附加的默認時間戳來返回它。我不想要這樣:9/19/2013 12:00:00 AM

任何想法,爲什麼它是在SQL Server中,而不是在我的應用程序的工作?

+2

好神,標點符號請。用它。 – tnw

回答

2

日期是日期是日期。不是一個字符串。您應該將其作爲日期讀取它,然後按照您之後選擇的格式對其進行格式化。對數據庫來說,日期只是一個數字 - 它沒有格式的概念。所以:

var when = sdr.GetDateTime(i); 
// now format when 
+0

Thankyou指向正確的方向,因爲我不想更改循環代碼,所以通過查詢'CONVERT(VARCHAR(11),dtetme)'中的更改工作。 – Maven

1

它作爲DateTime對象返回。在.Net DateTime不只是日期,它還有一個時間部分,它被設置爲12:00 AM時,不提供。

您應該使用DateReader.GetDateTime將結果保存在DateTime類型對象中,然後根據需要對其進行格式化。

您可能會看到:Custom DateTime formats

喜歡的東西:

for (int i = 0; i < 11; i++) 
{ 
    DateTime temp = sdr.GetDateTime(i); 
    rslt[i] = temp.ToString("M/d/yyyy"); 
} 
0

關鍵要回答你的問題是,你的價值被表示爲日期類型不是字符串。 sql server的日期表示爲Aaron在評論中寫的。

這意味着你需要使用某種模式進行格式化。在這種模式下,你可以說出你需要什麼時間。

它出現在你的RDBMS,默認情況下,我用圖案只打印當天月份和年份。在您的應用程序從另一方面爲模式dd/MM/YY hh:mm:ss tt

只是格式化它像你期望的那樣。

一個例子

DateTime.Now.ToString("yyyy/MM/dd");

+1

SQL Server中的日期時間在內部表示爲兩個整數:(a)從1900-01-01開始偏移的天數和(b)自午夜開始以0.33毫秒遞增的天數。它與時代無關(1970-01-01) - 我認爲你把這個與Unix時間戳混淆了。 –

+0

@AaronBertrand謝謝你指出。 –

相關問題