Использование varchar (14) как datetime в mysql

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

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

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

 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', которое, хотя и правильно, мне не очень помогает.

Вам нужно проанализировать эту строку до настоящего времени, mysql имеет функцию "STR_TO_DATE",

Ulises 07.06.2018 18:10

Как можно вписать "datetime" в 14 символов? Это YYYYMMDDHHmmss?

Paul Spiegel 07.06.2018 18:13

Формат YYYYMMDDHHmmss, как вы сказали, @PaulSpiegel. Я доволен его анализом, но, похоже, это происходит автоматически в старых таблицах. Есть ли глобальная настройка для преобразования всех Varchar (14) в Datetime? Я ценю вас обоих, что вы не просто предлагаете использовать Datetime вместо этого.

Mrenoe 07.06.2018 18:17

Приведите примеры данных, которые «работают», и данные, которые «не работают», с подробным описанием как, которые не работают. И предоставьте MCVE.

Bohemian 07.06.2018 18:18

Просто хотел написать "использовать DATETIME" :-)

Paul Spiegel 07.06.2018 18:18

Документы говорят, что это должно работать. «MySQL распознает значения DATETIME и TIMESTAMP в следующих форматах: ... Как строку без разделителей в 'YYYYMMDDHHMMSS' или 'YYMMDDHHMMSS'» - dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html - И это работает для меня.

Paul Spiegel 07.06.2018 18:27

Обновлено с помощью MVCE. Проблема заключалась в том, что в дате, когда я сохранял, отсутствовала последняя цифра.

Mrenoe 07.06.2018 18:41

Спасибо вам обоим, @Bohemian и Paul, это решило проблему.

Mrenoe 07.06.2018 18:49
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
8
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

MySQL recognizes DATETIME and TIMESTAMP values in these formats:

As a string with no delimiters in either 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS' format, provided that the string makes sense as a date. For example, '20070523091528' and '070523091528' are interpreted as '2007-05-23 09:15:28', but '071122129015' is illegal (it has a nonsensical minute part) and becomes '0000-00-00 00:00:00'.

Другие вопросы по теме