5

特定の日付範囲に該当するレコードのみを取得しようとしています。問題は、タイムスタンプと日付が同じセルに文字列として格納されることです。2013-05-01 と 2013-05-03 の間の日付の行のみを取得したいと考えています。

日付 (文字列として保存)

2013-05-01T23:19:44
2013-05-02T23:19:40
2013-05-06T23:19:46
2013-05-06T23:15:17

mysql

SELECT * FROM table WHERE date BETWEEN 2013-05-01 AND 2013-05-03
4

4 に答える 4

10

試す

SELECT *
  FROM table1
WHERE STR_TO_DATE(`date`,'%Y-%m-%d') BETWEEN '2013-05-01' AND '2013-05-03'

SQLフィドル

@FreshPrinceOfSOが絶対に正しく指摘したように、その場合はインデックスは使用されません

于 2013-05-07T17:25:28.287 に答える
1
SELECT * FROM table1 
WHERE STR_TO_DATE(SUBSTRING(`date`,1,10),'%d-%m-%Y') 
    BETWEEN '2013-05-01' AND '2013-05-03'
于 2013-05-07T17:22:53.253 に答える
0

文字列は、 のほぼ有効な構文ですdatetime。したがって、おそらくより遅い方法は、「T」をスペースに置き換えてからにキャストすることdatetimeです。

SELECT * FROM table1 WHERE
  CAST(REPLACE(`date`, 'T', ' ') AS DATETIME) 
  BETWEEN '2013-05-01' AND '2013-05-03';
于 2013-05-07T17:46:49.453 に答える