2016-03-02 15 views
1

我有一列permission_to,日期时间类型为此值:2016-12-31 00:00:00,我想将此值更改为:2016-12-31 23:59:59。我不需要更新行,因为我需要原始值,但修改后的值,我想在查询中使用像这样的另一列进行比较:MySQL - 在datetime中更改时间的函数

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的函数来修改时间,日期时间没有更新?

回答

1

你可以使用ADDTIME

SELECT permission_to, 
     ADDTIME(permission_to, '23:59:59') AS new_permission_to 
FROM tbl_decision; 

SqlFiddleDemo

输出:

╔══════════════════════════╦═════════════════════════╗ 
║  permission_to  ║ new_permission_to ║ 
╠══════════════════════════╬═════════════════════════╣ 
║ March, 02 2016 00:00:00 ║ March, 02 2016 23:59:59 ║ 
╚══════════════════════════╩═════════════════════════╝ 
1

您可以使用HOUR_MINUTE格式DATE_ADD功能。

DATE_ADD(permission_to, INTERVAL '23:59' HOUR_MINUTE) 
+0

5还剩9秒:) – lad2025

2

当我们正在处理“结束日期”,我们通常使用一天后,然后我们使用“小于”操作与此日期比较。

示例:代替2016-12-31,我们正在使用2017-01-01 而当我们使用<时,我们将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 
1

如果permission_to是datetime类型的,但总是保持像2016-12-31 00:00:00我将它存储为一个日期列,而不是日期时间值。

无论如何,我会写你的查询,因为这:

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'