![](/img/trans.png)
[英]Firestore query documents by birthday date, like only query by day and month exclude year?
[英]Using LIKE to search for Date with year and month only
我想過濾表以按月顯示記錄,所以我為用戶輸入創建了一個文本框。 現在我不知道我的查詢是否正確。 我沒有任何錯誤,但也沒有任何結果。 我使用LIKE,因為我沒有提供特定的日期。 有人可以提出更好的方法嗎?
ConnectToDatabase conn = null;
conn = ConnectToDatabase.getConnectionToDatabase();
String query = "Select * from inventoryreport where InDate LIKE "+txtYear.getText()+""+ txtMonth.getText()+"";
conn.setPreparedStatement(conn.getConnection().prepareStatement(query));
conn.setResultSet(conn.getPreparedStatement().executeQuery());
java.sql.ResultSetMetaData metaData = conn.getResultSet().getMetaData();
int columns = metaData.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement(metaData.getColumnName(i));
}
就像選擇它是錯誤的,因為您的數據庫不使用索引,並且速度很慢(並且不起作用)。 查詢是這樣的:
SELECT * FROM inventoryreport WHERE YEAR(Date_column) = 2014 AND MONTH(Date_column) = 3;
所以你的代碼是:
String query = "Select * from inventoryreport where YEAR(InDate) = " +txtYear.getText()+" AND MONTH(InDate) = "+ txtMonth.getText();
我認為這是日期格式中的一個小錯誤:
Your format : YYYYMM (no seperation symbol)
Right format: YYYY-MM-DD (with a '-' to seperate)
我認為
String query = "Select * from inventoryreport where InDate LIKE "+txtYear.getText()+"-"+ txtMonth.getText()+"-00";
如果您的數據庫僅包含每月的確切值,則應該對其進行修復。
否則你應該使用
Select * from inventoryreport where InDate BETWEEN '2014-03-18' AND '2014-03-20'
當列不被函數包圍時,SQL查詢可以利用索引。 以下where
子句將允許使用索引:
SELECT *
FROM inventoryreport
WHERE Date_Column >= str_to_date(concat_ws('-', txtYear.getText(), txtMonth.getText(), '01'), '%Y-%m-%d') and
Date_Column < adddate(str_to_date(concat_ws('-', txtYear.getText(), txtMonth.getText(), '01'), '%Y-%m-%d'), interal 1 month)
盡管更復雜,但是所有操作都基於常量,因此查詢引擎仍然可以利用Date_Column
上的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.