我有以下的where子句查询前几个月返回行太
AND DATE_FORMAT(l.created_on, "%d/%m/%Y") BETWEEN '06/02/2013' AND '07/02/2013'
其中created_on
是时间戳。
由于某种原因,查询现在还返回前几个月的行。有谁知道为什么?
注:
我需要的日期是在特定的格式
我有以下的where子句查询前几个月返回行太
AND DATE_FORMAT(l.created_on, "%d/%m/%Y") BETWEEN '06/02/2013' AND '07/02/2013'
其中created_on
是时间戳。
由于某种原因,查询现在还返回前几个月的行。有谁知道为什么?
注:
我需要的日期是在特定的格式
如果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')
Mysql字符串日期格式遵循模式yyyy-mm-dd。如果您有时间戳,请不要转换为日期,只需比较时间戳即可。
WHERE l.created_on
BETWEEN UNIX_TIMESTAMP('2012/02/06') AND UNIX_TIMESTAMP('2013/02/07')
+1在你的谓词中,'l.created_on'仍然是可靠的。 – 2013-02-18 08:13:05
你们都在改变我的约会!我使用的是特定的格式,不能改变它,如果我用我的格式尝试你的代码,我没有得到任何结果。 – 2013-02-18 08:14:45
@ eric.itzhak您的意思是?没有改变。什么具体格式? – 2013-02-18 08:17:58
这是时间戳。如果我这样做,我没有得到任何结果。 – 2013-02-18 08:10:49
当有结果时,第二个选项也不会返回结果。 – 2013-02-18 08:12:34
好吧,如果是这样的话,那么你应该转换值,而不是列,例如'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