Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将MySQL列解释为日期间隔单位?_Mysql_Sql_Date_Select_Sql Order By - Fatal编程技术网

是否将MySQL列解释为日期间隔单位?

是否将MySQL列解释为日期间隔单位?,mysql,sql,date,select,sql-order-by,Mysql,Sql,Date,Select,Sql Order By,在MySQL中使用日期和时间函数时,比如,是否可以将间隔单位存储在列中并在查询中使用 例如,考虑下表: +---------------------------+---------------------------------------------------+------+-----+---------+----------------+ | Field | Type

在MySQL中使用日期和时间函数时,比如,是否可以将间隔单位存储在列中并在查询中使用

例如,考虑下表:

+---------------------------+---------------------------------------------------+------+-----+---------+----------------+
| 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>从快照计划中选择*按日期输入顺序添加(现在(), 每间隔1次);错误1064(42000):您在 您的SQL语法;检查与您的MySQL对应的手册 在“everyInterval”附近使用正确语法的服务器版本 第1行


我对这种行为并不感到惊讶,我只是好奇这是否可行。在代码中这样做并不是世界末日,但我想知道这是否可能。

MySQL对于区间表达式没有那么灵活。您需要一个带有硬编码值的大
大小写
表达式:

order by case everyInterval
    when  'minute' then now() + inteval everyFrequency minute
    when  'hour'   then now() + inteval everyFrequency hour
    when  'day'    then now() + inteval everyFrequency day
    when  'week'   then now() + inteval everyFrequency week
    when  'month'  then now() + inteval everyFrequency month
    when  'year'   then now() + inteval everyFrequency year
end
一个更简单的替代方案是重新设计模式,以固定频率(例如秒和月)存储间隔。然后你可以做:

order by now() 
    + interval everyFrequencySecond second
    + interval everyFrequencyMonth  month

说清楚一点,我知道我可以试着把其中的一些值表示为秒数,或者类似的东西。。。但这并不能保证订单是正确的。1个月并不总是发生在30天之前或之后,例如,我实际上在发布我的问题后得出了相同的结论。我想我可以做嵌套的IF条件,然后想知道MySQL是否可以做这样的case。不管怎样,你的答案很好。我认为固定频率方法不适用于我的用例,因为这些行表示可以在将来的任何时刻创建条目,这将指示它们的创建/删除顺序。