ODBC格式對於月份和日期使用兩位數字,即2015-08-29 00:00:00
而不是2015-8-29 00:00:00
。
雖然使用日期型參數會更好。否則,應使用明確的日期文字,不需要任何轉換,且不受排序影響。
完整的ISO 8601格式不需要轉換,例如:2015-08-29T00:00:00
。未分離的日期格式也不需要轉換,例如20150829
。
如果UPLOAD_DATE
是date
列,則沒有理由指定時間部分。查詢可以寫成如下:
declare @startDate date, @endDate date
....
Select *
From BILLS
Where UPLOAD_DATE BETWEEN @startDate AND @endDate
如果語句是一個存儲過程的一部分,或者是通過ADO.NET調用,這是首選的方法,如:
var startDate=new DateTime(2015,8,29);
var endDate=startDate.AddMonths(1).AddDays(-1);
var myCmd=new SqlCommand("SELECT .... Where UPLOAD_DATE BETWEEN @startDate AND @endDate");
myCmd.Parameters.Add("@startDate",startDate);
myCmd.Parameters.Add("@endDate",endDate);
....
使用日期文字相同的語句可以是:
Select *
From BILLS
Where UPLOAD_DATE BETWEEN '20150829' AND '20150928'
部分將只有UPLOAD_DATE
需要的時間是一個datetime
類型。在這種情況下,將標準更改爲小於下一個日期更容易:
Select *
From BILLS
Where UPLOAD_DATE >= '20150829' AND UPLOAD_DATE < '20150929'
我認爲'UPLOAD_DATE'是一個varchar列,有些值的格式不正確。嘗試以下語句進行確認:'select cast(UPLOAD_DATE as DATETIME)FROM Bills'。 –
這是一個日期列 – Jonas
看看這篇文章的答案http://stackoverflow.com/questions/14119133/conversion-failed-when-converting-date-and-or-time-from-character-string-while-i 。你可能會有一些想法。 –