簡體   English   中英

sql datetime與字符串進行比較

[英]sql datetime to compare with string

如果我具有以下訪問sql數據庫的日期,以將其與用戶輸入的字符串進行比較:

public IQueryable<Audit> FindAllAuditsByNameDate(String name, String date)
        {
            return from audit in db.Audits
                   where audit.EventTime.ToString().Contains(date) && audit.User.UserName.Contains(name)
                   orderby audit.User.UserName
                   select audit;
        }

如果用戶在日期中輸入“ /”字符,它將失敗。 我該如何解決?

嘗試DateTime.Parse 它能夠理解許多用於輸入DateTimes的常見格式。

DateTime dateStart = DateTime.Parse(date);
DateTime dateEnd = dateStart.AddDays(1);

return from audit in db.Audits
       where audit.EventTime >= dateStart &&
             audit.EventTime < dateEnd &&
             audit.User.UserName.Contains(name)
       orderby audit.User.UserName
       select audit;

如果DateTime.Parse沒有解析所需的格式,則可以始終使用DateTime.ParseExact並提供自己的格式字符串。

考慮到EventTime是DateTime類型的嗎? 您需要對照其值進行檢查。 首先將字符串日期轉換為DateTime

DateTime newDate = Convert.ToDateTime(date);
return from audit in db.Audits
                   where audit.EventTime.Value == newDate && audit.User.UserName.Contains(name)
                   orderby audit.User.UserName
                   select audit;

警告-請勿使用Contains

容器的缺點

假設我有兩個列表對象。

List 1      List 2
  1           12
  2            7
  3            8
  4           98
  5            9
  6           10
  7            6

使用Contains,它將搜索List-2中的每個List-1項目,這意味着迭代將發生49次!


回答您原來的問題

public IQueryable<Audit> FindAllAuditsByNameDate(String name, String date)
{
    DateTime Dt;
    if (DateTime.TryParse(date, out Dt))
    {
        return from audit in db.Audits
                where audit.EventTime.ToString().Contains(date) && audit.User.UserName.Contains(name)
                orderby audit.User.UserName
                select audit;
    }
    return null;
}

的TryParse

  1. 返回一個布爾值,指示它是否成功。
  2. 它只是在內部嘗試/捕獲為什么沒有例外的實現,因此速度很快。
  3. 如果值可能是InValid,請使用它。

解析

  1. 引發異常。
  2. 如果您確定該值將有效,請使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM