1

検索で使用しているクエリの下

「2012 年 1 月 5 日」と「2012 年 5 月 31 日」の間のデータを検索すると、検索に日付範囲がありますが、クエリはすべてのレコード セットを返します。

SELECT t.created date, t.saleid sale_id, u.id user_id, NULL merchant_name, cheque_number cheque_number, u.first_name name, (
SELECT company_name
FROM users
WHERE id = u.my_charity_id)charity_name, t.campaignname website, t.campaignid campaign_id, t.mysoko_discount discount_percentage, t.discount, t.salecommission sale_commission, t.salevalue total_sale_value, t.salestatus sale_status
FROM `transaction` AS `t` , `users` AS `u`
WHERE DATE_FORMAT( t.created, '%d/%m/%Y' )
BETWEEN '01/05/2012' AND '31/05/2012'
AND t.user_id = u.id
LIMIT 0 , 30

日付範囲検索データを探していますが、結果はテーブルからすべてのデータを返します。

date            sale_id       user_id   
2012-04-19 00:00:00     20253305    45  
2012-04-11 00:00:00     20253306    68  
2012-04-23 00:00:00     20253307    68  
2012-04-25 00:00:00     20253308    45  
2012-04-27 00:00:00     20253309    45  
2012-04-29 00:00:00     20253310    68  
2012-04-30 00:00:00     20253311    45  
2012-05-01 00:00:00     20253312    45  
2012-05-03 00:00:00     20253313    68  
2012-04-18 00:00:00     20253314    4

私の検索は、日付範囲 txn 検索 (日付から / 日付まで) からです

入力日付形式: DD/MM/YYYY

4

4 に答える 4

1

これを行う:

WHERE t.created BETWEEN '2012-05-01 00:00:00' AND '2012-05-31 23:59:59' ...

MySQLは、「2012-05-31 23:59:59」を適切なDATETIMEまたはTIMESTAMPタイプとして解釈し、のインデックスを利用できるようにしますt.created

問題は、現在のクエリで、の文字列表現が文字「01/05/2012」と「31/05/2012」のt.created間にあることを指定していることです。日-月-年を文字列形式にするため、日コンポーネントが「02」から「30」までのすべての日付が一致します。(そして、5月以降の任意の月の最初が一致するなど)

于 2012-05-27T03:09:07.947 に答える
1

次のように行をフィルタリングしてみてください。

WHERE t.created >= '2012-05-01'
  AND t.created <  '2012-06-01'

月が引数として指定されている場合、WHERE 句で次の計算を使用できます。

WHERE t.created >= @monthdate
  AND t.created <  @monthdate + INTERVAL 1 MONTH
于 2012-05-27T00:08:01.900 に答える
0

1 つのオプション:

 WHERE MONTH(t.created) = 5 AND YEAR(t.created) = 2012
于 2012-05-26T18:20:14.747 に答える
0
SELECT t.created date, t.saleid sale_id, u.id user_id, NULL merchant_name, cheque_number cheque_number, u.first_name name, (
SELECT company_name
FROM users
WHERE id = u.my_charity_id)charity_name, t.campaignname website, t.campaignid campaign_id, t.mysoko_discount discount_percentage, t.discount, t.salecommission sale_commission, t.salevalue total_sale_value, t.salestatus sale_status
FROM `transaction` AS `t` , `users` AS `u`
WHERE DATE_FORMAT( t.created, '%d/%m/%Y' )
BETWEEN STR_TO_DATE('01/05/2012','%d,%m,%Y') AND STR_TO_DATE('31/05/2012','%d,%m,%Y')
AND t.user_id = u.id
LIMIT 0 , 30
于 2012-05-27T02:31:55.790 に答える