Я работаю с базой данных, которая использует 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', которое, хотя и правильно, мне не очень помогает.
Как можно вписать "datetime" в 14 символов? Это YYYYMMDDHHmmss?
Формат YYYYMMDDHHmmss, как вы сказали, @PaulSpiegel. Я доволен его анализом, но, похоже, это происходит автоматически в старых таблицах. Есть ли глобальная настройка для преобразования всех Varchar (14) в Datetime? Я ценю вас обоих, что вы не просто предлагаете использовать Datetime вместо этого.
Приведите примеры данных, которые «работают», и данные, которые «не работают», с подробным описанием как, которые не работают. И предоставьте MCVE.
Просто хотел написать "использовать DATETIME" :-)
Документы говорят, что это должно работать. «MySQL распознает значения DATETIME и TIMESTAMP в следующих форматах: ... Как строку без разделителей в 'YYYYMMDDHHMMSS' или 'YYMMDDHHMMSS'» - dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html - И это работает для меня.
Обновлено с помощью MVCE. Проблема заключалась в том, что в дате, когда я сохранял, отсутствовала последняя цифра.
Спасибо вам обоим, @Bohemian и Paul, это решило проблему.






У меня возникла проблема, когда 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'.
Вам нужно проанализировать эту строку до настоящего времени, mysql имеет функцию "STR_TO_DATE",