5

日付をserver_date_time列varchardd/mm/yyyy形式で保存していて、いくつかの日付の間にあるレコードをフェッチしたいので、クエリを使用しました

    select * from activity_emp 
where date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')>=
'29/09/2012'
    and date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')<=
'07/10/2012';

クエリで文字列に変換varcharしましたが、クエリは2012年9月29日と2012年9月30日にのみ関連するクエリデータを返します。また、10月のクエリを返す必要があります

4

6 に答える 6

8

これで試してみてください。質問のように、日付を dd/mm/yyyy 形式で入力できます...

SELECT * FROM activity_emp
WHERE STR_TO_DATE(server_date_time, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/08/2012', '%d/%m/%Y')
    AND STR_TO_DATE('07/10/2012', '%d/%m/%Y')

更新:VARCHARデータ型を からに変更することを強くお勧めしますDATETIME

乾杯!!!

于 2012-10-08T06:27:22.817 に答える
1

STR_TO_DATEで十分です。DATE_FORMATに戻しますVARCHAR

SELECT...
FROM...
WHERE str_to_date(substr(server_date_time,1,10),'%d/%m/%Y') 
         BETWEEN '29/09/2012' AND '07/10/2012'

お取引の際は、またはデータ型をdateご利用ください。これにより、クエリのパフォーマンスに影響を与えるキャストを回避できます。DATEDATETIME

于 2012-10-08T06:06:00.830 に答える
1

これを試してみてください -

SELECT * FROM activity_emp
WHERE STR_TO_DATE(server_date_time, '%d/%m/%Y')
  BETWEEN '2012-09-29' AND '2012-09-30'

ただしserver_date_time、MySQL がインデックスを使用できるように、DATETIME データ型で格納することをお勧めします。

于 2012-10-08T06:12:10.997 に答える
0
SELECT * 
FROM  `activity_emp` 
WHERE STR_TO_DATE(  `column_name` ,  '%d/%m/%Y' ) 
BETWEEN  '2010-10-10'
AND  '2010-11-10'
于 2013-06-30T15:23:41.193 に答える
0

日付を常にdd/mm/yyyy列に格納している場合、これは簡単な作業です。

SELECT * from activity_emp 
where server_date_time BETWEEN '29/09/2012' AND '07/10/2012'

これで十分ではありませんか?それがあなたを助けることを願っています

于 2012-10-08T06:12:42.353 に答える
0

これは、2 つの日付を検索するためのシンプルでわかりやすい日付クエリです。

Date that stored in datebase in like 01/01/2016 and datatype is varchar
SELECT * FROM `test` WHERE STR_TO_DATE(`test`.`date`, '%d/%m/%Y') BETWEEN '2016-01-01' AND '2016-01-31' ORDER BY `test`.`date` ASC
于 2016-03-07T08:45:40.277 に答える