UNIX_TIMESTAMP()比较

时间:2013-12-17 19:09:53

标签: mysql unix-timestamp

大家好我UNIX_TIMESTAMP()遇到问题:当我用它来检查另一个UNIX_TIMESTAMP()时,我从未得到我期望的结果。

这里以小查询为例:

SELECT
  UNIX_TIMESTAMP(STR_TO_DATE(mydate, '%Y%m%d')) as Date1,
  UNIX_TIMESTAMP(STR_TO_DATE(mydate2, '%Y%m%d')) as Date2
FROM
  my_table
WHERE
  (UNIX_TIMESTAMP() BETWEEN Date1 and Date2 )

其中Date11387062000Date21389740400UNIX_TIMESTAMP(),除非我们在2014年1月之后,UNIX_TIMESTAMP()的结果介于2个值之间

当我从桌子上拿到至少一排时,它仍然没有给我任何结果;我曾尝试将日期格式化为{{1}},但我在每次尝试都失败了。

可能是一件非常愚蠢的事情,但我一直在抨击这个问题超过2个小时没有得到任何结果。

任何人都知道错误的位置?

谢谢。

2 个答案:

答案 0 :(得分:2)

您的自定义别名未被WHERE子句过滤,您需要使用HAVING子句

SELECT
  UNIX_TIMESTAMP(STR_TO_DATE(mydate, '%Y%m%d')) as Date1,
  UNIX_TIMESTAMP(STR_TO_DATE(mydate2, '%Y%m%d')) as Date2
FROM
  my_table
HAVING
  (UNIX_TIMESTAMP() BETWEEN Date1 and Date2 )

SELECT
  UNIX_TIMESTAMP(STR_TO_DATE(mydate, '%Y%m%d')) as Date1,
  UNIX_TIMESTAMP(STR_TO_DATE(mydate2, '%Y%m%d')) as Date2
FROM
  my_table
WHERE 
  (UNIX_TIMESTAMP() BETWEEN UNIX_TIMESTAMP(STR_TO_DATE(mydate, '%Y%m%d'))
  and 
  UNIX_TIMESTAMP(STR_TO_DATE(mydate2, '%Y%m%d')))

答案 1 :(得分:1)

为什么不反过来呢?

SELECT @TODAY := SELECT DATE_FORMAT(NOW(), '%Y%m%d');

SELECT ... FROM my_table WHERE @TODAY BETWEEN (mydate, mydate2);

通过这种方式,您还可以直观地检查目标行上的@TODAY以及mydatemydate2,并可以在日期字段上使用索引。