2016-05-22 241 views
-1

我有兩個問題在兩個項目中,都與日期時間有關。.Net/SQL Server:比較日期(日期時間<->日期時間,日期時間<-> varchar)

項目1

日期在SQL Server 2008數據庫保存爲yyyy/MM/dd,但System.DateTime.Now.ToShortDateString()回報dd/MM/yyyy。以內聯代碼書寫的SQL查詢無法比較兩個日期。我已嘗試ParseExact,CAST,Convert和許多其他選項,但無法使其工作。

項目2

在SQL Server 2008數據庫,日期時間保存在varchar(50)列。即使在嘗試了很多選項之後,使用Between子句也會因內聯SQL查詢而失敗。

注:我在前端和後端使用快遞版本。

請在兩個幫助。提前致謝。

+1

如果你存儲的日期和時間, ***不要使用'varchar(50)'!乾淨利落。如果您只需要日期(無時間),則使用**適當的**數據類型 - 如果您需要日期和時間部分,則使用「DATE」;如果需要日期和時間部分,則使用「DATETIME2(n)」。 –

+0

「在SQL Server 2008數據庫中,日期時間保存在varchar(50)列中。」 - 你爲什麼會這樣?認真。 –

回答

-1

使用.NET中的任何DateTime,您可以在tostring函數中提供日期時間格式。有了這個,你可以強制你的日期時間與SQL Server相同的格式進行比較。

+2

你應該**不**將日期/時間轉換爲**字符串**進行比較 - 您應該將它們保留爲**本機'DATETIME' **類型並進行比較! (因爲這些是任何格式和其他廢話**獨立**) –

-1

項目1:解決

您可以將日期轉換如下格式簡單:

select convert(varchar,dateadd(MI, 330, GETUTCDATE()),111) 

輸出:2016年5月22日

項目2:解決方案

inst使用between的EAD您可以使用下面的查詢搜索

select * from yourtablename 
where (datecolumn>=convert(varchar,dateadd(MI, 330, GETUTCDATE()),111) and 
datecolumn<=convert(varchar,dateadd(MI, 330, GETUTCDATE()),111)) 

嘗試,讓我知道了,該死的肯定,這將工作..

問候: ķ

+1

[踢壞的習慣:聲明VARCHAR沒有(長度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/ 09/bad-habits-to-kick-declaring-varchar-without-length.aspx) - 你應該總是**爲你使用的任何'varchar'變量和參數提供一個長度(包括當你在'CONVERT'調用!) –

+0

是的,但是,這裏僅僅是轉換格式本身並不需要聲明長度,上面的代碼將正常工作。 – Kannappan