MySQL-код для преобразования даты и времени Excel
Значения даты и времени Excel выглядят как 42291.60493, что означает, что MySQL рассматривает их как строки, а не как даты. Есть ли код MySQL, который может конвертировать их в MySQL datetime? (например, в MS SQL )
- SSIS / SQL Server - работа с различными обозначениями типа денег
- Преобразование xsxl в csv
- Как преобразовать строку в число и наоборот в Excel
- apache metamodel - где на нестрочных столбцах в файлах
- Выделить значение из ячейки как формат
- Libreoffice Calc: объединяет два значения, когда один является датой (или как мне преобразовать дату в строку)?
- Как легко преобразовать CSV со странным форматом даты в указанный формат?
- как записать значение в ячейку с кодом vba без автоматического преобразования типов?
Я могу думать о 2 решениях:
-
Преобразуйте даты в excel в форматированную строку даты, которая соответствует формату даты и времени mysql, используя функцию text () в excel.
-
Преобразовать число с использованием расчета на сегодняшний день в mysql:
(приведенное ниже выражение может быть упрощено)
select date_add(date_add(date('1899-12-31'), interval floor(@datefromexcel) day), interval floor(86400*(@datefromexcel-floor(@datefromexcel))) second)
Excel хранит дату в виде числа дней с 1899-12-31. Unix хранит количество секунд с 1970-01-01, но допускаются только неотрицательные значения.
Итак, для даты вы можете сделать
select date_add(date('1899-12-31'), interval $Exceldate day )
Это не работает в течение дробных дней. Но, для времени даты unix, это было бы хорошо:
select $ExcelDate*24*60*60 + unix_timstamp('1899-12-31')
Но отрицательные значения проблематичны. Итак, это требует чего-то вроде этого:
select ($ExcelDate - datediff('1899-12-31', '1970-01-01')) * 24*60*60
То есть, просто подсчитайте количество секунд после даты отсечки Unix. Примечание: это предполагает, что дата после 1970-01-01, потому что MySQL не понимает даты unix перед отключением.