在MySQL where子句中动态创建匹配月份列表

时间:2013-12-18 15:01:29

标签: mysql

我有一个表,它按创建日期记录数据文件的版本(时间戳存储为INT)。每月最多上传1个版本。

在下面的查询中,我试图获取在1月,4月,7月或10月上传的任何版本的导入时间。

> SELECT import_time FROM importlog WHERE
> DATE_FORMAT(FROM_UNIXTIME(import_time), '%m') = 1 OR
> REPEAT(DATE_FORMAT(FROM_UNIXTIME(import_time), '%m') = 1+3,3))

目前这只返回Jan和Apr,因为我看到重复只是做了3次相同的条件。 我认为需要发生的是每次重复声明发生时1 + 3语句都是错误的:

1+3;
1+6;
1+9;

我需要这样的动态方法,因为虽然我已将其描述为1月,但实际上这个日期也可能因用户而异。

由于我不断回到auto_increment来创建INSERT查询,因此我的研究并不富有成效。任何见解都是最受欢迎的。

更新 我能够通过一个单独的Mysql查询来做到这一点,该查询为所有允许的月份创建一个字符串。 $ months =(1,4,7,10) DATE_FORMAT(FROM_UNIXTIME(import_time),'%m')IN $ months

所以这是一个快速而肮脏的解决方案,对于我自己的学习,我很想知道是否有更复杂的解决方案。

亲切的问候, 卡尔

1 个答案:

答案 0 :(得分:0)

为什么你不这样做?

SELECT import_time
FROM importlog
WHERE DATE_FORMAT(FROM_UNIXTIME(import_time), '%m') in ('01', '04', '07', '10');