我有一个具有datetime类型的列permission_to,它的值为:2016-12-31 00:00:00,我想将这个值更改为:2016-12-31 23:59:59。我不需要更新行,因为我需要原始值,但我希望在查询中使用修改后的值来与另一列进行比较,如:
SELECT
d.id_machine
IF(
d.permission_from < '2016-01-01 00:00:00',
'2016-01-01 00:00:00',
d.permission_from
) AS date_from,
IF(
'(HERE I NEED FUNCTION TO CHANGE DATETIME FROM 2016-12-31 00:00:00 TO 2016-12-31 23:59:59) > 2016-02-02 23:59:59',
'2016-02-02',
(AGAIN THE SAME FUCTION)
) AS date_to
FROM tbl_decision AS d在没有更新的情况下,是否有任何MySQL函数可以在datetime中修改时间?
发布于 2016-03-02 08:30:25
当我们处理“结束日期”时,我们通常使用后天,然后使用“小于”操作与此日期进行比较。
例子:不是2016-12-31,我们使用的是2017-01-01,当我们使用< so,我们把2016年一直到最后一刻。
SELECT
d.id_machine
IF(
d.permission_from < '2016-01-01 00:00:00',
'2016-01-01 00:00:00',
d.permission_from
) AS date_from,
IF(
DATE_ADD(d.permission_to,INTERVAL 1 DAY) > 2016-02-02 23:59:59',
'2016-02-02',
DATE_ADD(d.permission_to,INTERVAL 1 DAY)
) AS date_to
FROM tbl_decision AS d发布于 2016-03-02 08:17:43
您可以在HOUR_MINUTE函数中使用DATE_ADD格式。
DATE_ADD(permission_to, INTERVAL '23:59' HOUR_MINUTE)发布于 2016-03-02 08:40:41
如果permission_to的类型为datetime,但总是保存类似于2016-12-31 00:00:00的值,我将将其存储为date列而不是datetime。
无论如何,我会将您的查询写成如下:
SELECT
d.id_machine,
greatest(d.permission_from, '2016-01-01') AS date_from,
least(d.permission_to + INTERVAL 1 DAY, '2016-02-02') AS date_to
FROM
tbl_decision AS d如果您想获得一天的所有记录,这将稍微改变您的逻辑,而不是这样:
where
datetimecolumn>='2016-01-01 00:00:00'
and datetimecolumn<='2016-01-01 23:59:59'(如果日期时间是2016-01-01 23:59:59.001,会发生什么情况?MySQL现在支持微秒!)就用这个吧:
where
datetimecolumn>='2016-01-01 00:00:00'
and datetimecolumn<'2016-01-02 00:00:00'https://stackoverflow.com/questions/35741678
复制相似问题