2013-02-18 52 views
1

我有以下的where子句查询前几个月返回行太

AND DATE_FORMAT(l.created_on, "%d/%m/%Y") BETWEEN '06/02/2013' AND '07/02/2013' 

其中created_on是时间戳。

由于某种原因,查询现在还返回前几个月的行。有谁知道为什么?

注:

我需要的日期是在特定的格式

回答

0

如果created_on已经是(数据类型),

,你可以直接使用查询它的日期,

WHERE created_on BETWEEN '2013-02-06' AND '2013-02-07' 

但如果日期是字符串,请使用STR_TO_DATE

WHERE STR_TO_DATE(l.created_on, '%d-%m-%Y') BETWEEN '2013-02-06' AND '2013-02-07' 

更新1

,因为你不想改变你输入的日期的格式,那么你就需要使用STR_TO_DATE

进行格式化
WHERE l.created_on BETWEEN STR_TO_DATE('06/02/2013','%d/%m/%Y') AND 
          STR_TO_DATE('07/02/2013','%d/%m/%Y') 
+0

这是时间戳。如果我这样做,我没有得到任何结果。 – 2013-02-18 08:10:49

+0

当有结果时,第二个选项也不会返回结果。 – 2013-02-18 08:12:34

+0

好吧,如果是这样的话,那么你应该转换值,而不是列,例如'WHERE l.created_on BETWEEN STR_TO_DATE('06/02/2013','%d /%m /%Y')AND STR_TO_DATE '07/02/2013','%d /%m /%Y')' – 2013-02-18 08:13:47

1

Mysql字符串日期格式遵循模式yyyy-mm-dd。如果您有时间戳,请不要转换为日期,只需比较时间戳即可。

WHERE l.created_on 
BETWEEN UNIX_TIMESTAMP('2012/02/06') AND UNIX_TIMESTAMP('2013/02/07') 
+1

+1在你的谓词中,'l.created_on'仍然是可靠的。 – 2013-02-18 08:13:05

+0

你们都在改变我的约会!我使用的是特定的格式,不能改变它,如果我用我的格式尝试你的代码,我没有得到任何结果。 – 2013-02-18 08:14:45

+0

@ eric.itzhak您的意思是?没有改变。什么具体格式? – 2013-02-18 08:17:58