大家好我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 )
其中Date1
为1387062000
为Date2
为1389740400
为UNIX_TIMESTAMP()
,除非我们在2014年1月之后,UNIX_TIMESTAMP()
的结果介于2个值之间
当我从桌子上拿到至少一排时,它仍然没有给我任何结果;我曾尝试将日期格式化为{{1}},但我在每次尝试都失败了。
可能是一件非常愚蠢的事情,但我一直在抨击这个问题超过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
以及mydate
和mydate2
,并可以在日期字段上使用索引。