在mysql中使用date和time函数时,比如date\u add,是否可以将间隔单位存储在列中并在查询中使用?
例如,考虑下表:
+---------------------------+---------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+---------------------------------------------------+------+-----+---------+----------------+
| snapshotSchedule_entry_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| snapshotSchedule_id | int(10) unsigned | NO | PRI | NULL | |
| everyFrequency | smallint(5) unsigned | NO | | NULL | |
| everyInterval | enum('minute','hour','day','week','month','year') | NO | | NULL | |
| afterFrequency | smallint(5) unsigned | NO | | NULL | |
| afterInterval | enum('minute','hour','day','week','month','year') | NO | | NULL | |
+---------------------------+---------------------------------------------------+------+-----+---------+----------------+
以下查询工作正常,因为它只处理区间表达式:
select * from snapshotSchedule_entry order by date_add(now(), interval everyFrequency month);
当我想处理间隔单位(例如月、年等)时,它不会解释它。
mysql>select*from snapshotschedule\u entry order by date\u add(now(),interval 1 everyinterval);错误1064(42000):您的sql语法有错误;在第1行的“everyinterval”附近,检查与mysql服务器版本相对应的手册,以获得正确的语法
我对这种行为并不感到惊讶,我只是好奇这是否可行。在代码中这样做并不是世界末日,但我想知道这是否可能。
1条答案
按热度按时间g6ll5ycj1#
mysql对于区间表达式没有那么灵活。你需要一个大的
case
具有硬编码值的表达式:一个更简单的替代方法是重新设计模式,以固定频率(比如秒和月)存储间隔。你可以这样做: