2013-03-10 110 views
-1

我有一個名爲ReceivingdateNVARCHAR列。我想它與當前時間的內容比較,但是當我打電話WHERE (Receivingdate < Getdate()),我得到以下錯誤:比較日期時出錯

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

我:

The conversion of nvarchar to datetime resulted in an out of range value

我插入使用從C#以下調用數據我想知道我做錯了什麼。

+3

什麼樣的數據類型是'Receivingdate'列?它應該是datetime2(或日期時間)不是字符串.... – 2013-03-10 03:55:37

+0

它是nvarchar數據類型 – 2013-03-10 04:03:24

+6

簡單地說:使用適當的日期時間數據類型NOT varchar/nvarchar。 – 2013-03-10 04:05:17

回答

0

您的錯誤是您正在嘗試將字符串與日期進行比較。日期是數字。擔心格式的唯一時間是當你顯示它們時。

對於你至今顯示,C#代碼從

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

改變

DateTime.Today; 

,你應該沒問題。

+0

這可以工作。另外,將日期放入nvarchar是不好的做法。意外的問題可能會發生。它允許編寫錯誤的代碼。 – 2013-03-10 04:12:23

+1

這仍然會將字符串插入到不適合的列類型中,只是現在它將混合使用「09/03/2013」​​和「2013年3月9日」。問題中的錯誤實際上是由其他垃圾引起的,其實它並沒有真正解決很多問題,只需在(a)將表中的垃圾數據和(b)離開列作爲字符串。 – 2013-03-10 04:34:14

3

你做錯了什麼是在一個NVARCHAR列中存儲日期。請停止這樣做。修復您的表格並使用DATE數據類型創建該列。該錯誤是由垃圾數據進入你的表引起的。查找使用的行:

SELECT Receivingdate FROM dbo.YourTable 
    WHERE ISDATE(ReceivingDate) = 0; 

現在,您需要在修復數據類型之前更正或刪除這些行。然後:

ALTER TABLE dbo.YourTable 
    ALTER COLUMN ReceivingDate DATE; 

接下來,在插入時停止轉換爲區域字符串格式。只需從C#中插入DateTime的值,根本不需要調用.ToString()。你絕對沒有理由把這個過程轉換成日期,然後再通過這個過程再回來,除非你想要顯示它。

+0

好的,但我想在該格式「dd/MM/yyyy」在sql列中顯示日期,並在其上使用該查詢 – 2013-03-10 05:12:18

+0

@SaimaMaheen,您仍然可以以'DateTime'格式查詢您的數據。你必須將任何特定的原因格式化爲「dd/MM/yyyy」SQL選擇列而不是c#中的列? – gunr2171 2013-03-10 05:21:46

+0

@Saima你爲什麼關心它存儲的格式?讓SQL Server擔心這一點。將其存儲爲DATE,並在顯示值時擔心格式。 – 2013-03-10 05:25:47