Использование varchar (14) в качестве datetime в mysql - PullRequest
0 голосов
/ 07 июня 2018

Я работаю с базой данных, которая использует varchar(14) в качестве типа данных datetime, а в более старых таблицах он плавно работает как тип datetime с такими функциями, как DATEDIFF().

Я пытался использовать этот формат для создания новой таблицы и оставаться последовательным в этом проекте, и он не работает с функциями даты и времени.Существуют ли какие-либо макросы преобразования, пользовательские типы данных или глобальные функции, которые могут ссылаться на эти старые столбцы, которые мне нужно обновить для моей новой таблицы?Где бы я искать эти?

Учитывая эти две таблицы:

 CREATE TABLE `working` (
  `id` varchar(30) NOT NULL DEFAULT '',
  `timecomplete` varchar(14) DEFAULT NULL,
  `count` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`count`),
  UNIQUE KEY `unique_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1

CREATE TABLE `notWorking` (
  `count` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id` varchar(30) NOT NULL,
  `delDate` varchar(14) DEFAULT NULL,
  PRIMARY KEY (`count`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

С первой я могу запросить SELECT id FROM working WHERE DATEDIFF(NOW(), timecomplete) >1; и все хорошо.

На втором этапе SELECT id FROM notWorking WHERE DATEDIFF(NOW(), delDate) >1; возвращает предупреждение: Incorrect datetime value: '2018040305000', которое, несмотря на правильность, мне мало помогает.

1 Ответ

0 голосов
/ 07 июня 2018

У меня была проблема, когда varchar (14) не работал как тип DateTime в MySQL.Оказывается, мне не хватало ни одной цифры.Документацию по этому вопросу можно найти здесь: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html

В частности, эта строка ответила на многие мои вопросы относительно того, поддерживается ли она MySQL.

MySQL распознает DATETIME и TIMESTAMP.значения в следующих форматах:

В виде строки без разделителей в формате «ГГГГММДДЧЧММСС» или «ГГММДДЧЧММСС» при условии, что строка имеет смысл в качестве даты.Например, «20070523091528» и «070523091528» интерпретируются как «2007-05-23 09:15:28», но «071122129015» является недопустимым (имеет бессмысленную мелкую часть) и становится «0000-00-00 00:00:00 '.

...