簡體   English   中英

按日期過濾值和 ComboBox Vb.Net Mysql

[英]Filter values by Date and ComboBox Vb.Net Mysql

我想過濾日期和 combobox 中的值之間的值,我試過:

adapter.SelectCommand = New MySqlCommand("SELECT * FROM loins LIKE date(dateprocessed) between '" & DateTimePicker1.Value.ToString("yyyy-MM-dd") & "' and '" & DateTimePicker2.Value.ToString("yyyy-MM-dd") & "' WHERE projectcode= '" & ComboBox1.Text & "' ORDER BY code ASC", conn.getConnection)

並給出錯誤:

Additional information: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE date(dateprocessed) between '2021-09-20' and '2021-09-25' WHERE projectcode' at line 1

正如提到的問題下的評論,您需要做的就是用“where”子句替換“like”。 只想對查詢添加一些優化:

  • 將索引添加到“dateprocessed”列(如果您已經這樣做了,那就太好了)。 這將使您的查詢保持快速,即使您的數據增長到數百萬。
  • 不要將“DateTime”字段轉換為“date”(如“date(dateprocessed)”)以進行比較。 這樣做會產生許多不需要的副作用。
  1. 首先也是最重要的是,當您將 DateTime 字段轉換為日期時,您的查詢將不會使用索引,並且隨着數據的增長將開始花費極長的時間來完成查詢。 就我而言,在 7000 萬行中查詢最近 2 天(約 30,000 行)的數據,對於一些復雜的查詢,使用日期(列)轉換需要 46 分鍾,如果沒有轉換則需要 6 秒。

  2. 正如上一點所暗示的,轉換甚至可能沒有任何目的,並且可能再次導致一些錯誤。

    • DateTime '2021-09-25 10:21:30' 落在 '2021-09-25' 和 '2021-09-26' 之間,即使沒有將其轉換為日期,這些日期之間的所有其他 DateTimes 也是如此。

    • 即使您查詢的結果介於“2021-09-25”和“2021-09-26”之間,日期時間“2021-09-26 11:16:24”也會包含在您的結果中。 根據您的要求,這可能是您想要的東西或不需要的東西。 如果要包含它,只需從“2021-09-25”到“2021-09-27”進行查詢。

暫無
暫無

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

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