我正在构建一个用于演示软件的数据库。数据库中的日期字段需要是最新的,因为它的脚本将不断重建,因此日期始终是当前日期的当前日期。但是DATE()
函数似乎无法正常工作。
例如,我将命令行上的mySql脚本导入到数据库中,这是要插入的表之一
-- Table structure for table `tasks`
--
CREATE TABLE `tasks` (
`id` int(11) unsigned NOT NULL,
`funeral_id` int(11) DEFAULT NULL,
`deceased_id` int(11) DEFAULT NULL,
`contact_id` int(11) DEFAULT NULL,
`task_type_id` int(3) DEFAULT NULL,
`assigned_id` varchar(30) DEFAULT NULL,
`start_date` datetime DEFAULT NULL,
`end_date` datetime DEFAULT NULL,
`notes` text,
`courtesy_call` tinyint(1) DEFAULT NULL,
`q_accepted` tinyint(1) DEFAULT NULL,
`q_mailed` tinyint(1) DEFAULT NULL,
`q_returned` tinyint(1) DEFAULT NULL,
`status_id` int(1) DEFAULT '0',
`user_created_id` int(3) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`user_modified_id` int(3) DEFAULT NULL,
`modified` datetime DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
--
-- Dumping data for table `tasks`
--
INSERT INTO `tasks` (`id`, `funeral_id`, `deceased_id`, `contact_id`, `task_type_id`, `assigned_id`, `start_date`, `end_date`, `notes`, `courtesy_call`, `q_accepted`, `q_mailed`, `q_returned`, `status_id`, `user_created_id`, `created`, `user_modified_id`, `modified`) VALUES
(1, 1, 1, 1, 1, '39', NULL, 'DATE_ADD(NOW(), INTERVAL 4 DAY)', NULL, 0, NULL, NULL, NULL, 0, 1, '2016-05-27 16:40:17', NULL, '2016-05-27 16:40:17');
我希望今天构建end_date
字段加上四天,函数DATE_ADD(NOW(), INTERVAL 4 DAY)
返回0000-00-00 00:00:00
此外,我尝试使用NOW()
或CURRENT_TIMESTAMP()
的任何地方都会返回相同的值0000-00-00 00:00:00
这是为什么?
答案 0 :(得分:2)
这是一个小错字。
您正在尝试插入' DATE_ADD(NOW(),INTERVAL 4 DAY)'但是函数名称周围的引号将其转换为字符串,因此它会触发警告并插入0000-00-00
尝试删除引号
INSERT INTO `tasks` (`id`, `funeral_id`, `deceased_id`, `contact_id`, `task_type_id`, `assigned_id`, `start_date`, `end_date`, `notes`, `courtesy_call`, `q_accepted`, `q_mailed`, `q_returned`, `status_id`, `user_created_id`, `created`, `user_modified_id`, `modified`) VALUES
(1, 1, 1, 1, 1, '39', NULL, DATE_ADD(NOW(), INTERVAL 4 DAY), NULL, 0, NULL, NULL, NULL, 0, 1, '2016-05-27 16:40:17', NULL, '2016-05-27 16:40:17');
它也应该与CURDATE()
一起使用答案 1 :(得分:1)
从DATE_ADD(..)删除引号。
您还可以使用DATE_ADD(NOW(), INTERVAL 4 DAY)
或DATE_ADD(CURDATE(), INTERVAL 4 DAY)
INSERT INTO `tasks` (`id`, `funeral_id`, `deceased_id`, `contact_id`, `task_type_id`, `assigned_id`, `start_date`, `end_date`, `notes`, `courtesy_call`, `q_accepted`, `q_mailed`, `q_returned`, `status_id`, `user_created_id`, `created`, `user_modified_id`, `modified`) VALUES
(1, 1, 1, 1, 1, '39', NULL, DATE_ADD(CURDATE(), INTERVAL 4 DAY), NULL, 0, NULL, NULL, NULL, 0, 1, '2016-05-27 16:40:17', NULL, '2016-05-27 16:40:17');
您可以参考Mysql Date functions文档了解详细信息: