我想将此格式为“7/20/2008”的日期时间与格式为“7/20/2008 7:14:53 AM”的数据库中的日期时间进行比较。
我尝试使用“like”子句但它没有用,因为“like”子句只使用字符串而我使用的是日期时间格式。
任何人都可以告诉如何在数据库中转换和比较它并拉出日期时间。
protected void User_Querytime()
{
DataClasses2DataContext dc1 = new DataClasses2DataContext();
DateTime date1;
string date = Request.QueryString.Get("TimeOfMessage");
date1 = Convert.ToDateTime(date);
var query7 = from u in dc1.syncback_logs
where u.TimeOfMessage = date1
orderby u.TimeOfMessage descending
select u;
GridView1.DataSource = query7;
GridView1.DataBind();
}
答案 0 :(得分:3)
我认为您遇到了问题,因为date1
仅包含日期,而您的数据库包含完整的日期/时间值。要查找匹配项,您需要选择以下方法之一:
1)在将数据库值与目标进行比较之前,从数据库值中删除时间信息 2)将目标转换为范围,然后查找该范围内的数据库值。
List<DateTime> dateTimes = new List<DateTime>();
dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
dateTimes.Add(DateTime.Parse("7/20/2008 12:12:01 AM"));
dateTimes.Add(DateTime.Parse("7/21/2008 9:00:00 AM"));
dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));
DateTime targetDate = Convert.ToDateTime("7/20/2008");
// Remove time info from data in database
var matchingDates = from date in dateTimes
where date.Date == targetDate
select date;
// Or use your target date to create a range
DateTime rangeStart = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 0, 0, 0);
DateTime rangeEnd = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 23, 59, 59);
var matchingDates2 = from date in dateTimes
where (date >= rangeStart) && (date <= rangeEnd)
select date;
答案 1 :(得分:1)
虽然我无法测试您的确切问题,但我能够使用以下代码比较日期。
// Random Date Collection
List<DateTime> dateTimes = new List<DateTime>();
dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
dateTimes.Add(DateTime.Parse("7/20/2008 7:14:54 AM"));
dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));
DateTime myDateTime = DateTime.Parse("7/20/2008");
var query = from d in dateTimes
where d.ToShortDateString() == myDateTime.ToShortDateString()
select d;
答案 2 :(得分:0)
不要直接比较日期,而是将它与你接受的最小值/最大值进行比较。因此,而不是“DbDateCol = mydate”做“DbDateCol&gt; = myDate.Date和DbDateCol&lt; myDate.Date.AddDays(1)”。
通过使用Date属性,您将关闭时间组件(强制它为0)。通过添加一天,您将获得第二天的开始,并将其绑定在DateTime实例的日期。
答案 3 :(得分:0)
假设我正确理解你的问题,你应该可以使用
where u.TimeOfMessage.Date == date1
答案 4 :(得分:0)
假设TimeOfMessage
属性是DateTime,那么你应该可以做到
TimeOfMessage.Date
== date1
答案 5 :(得分:0)
using System.Data.Objects;
使用上面的内容并修改您的查询,如下所示:
var bla = (from log in context.Contacts
where EntityFunctions.TruncateTime(log.ModifiedDate) < today.Date
select log).FirstOrDefault();