簡體   English   中英

使用LIKE搜索僅包含年份和月份的日期

[英]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.

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