Вопрос или проблема
База данных возвращает строковую дату в следующем формате: Sep/30/2025
. Мне нужно создать представление, которое будет выполнять расчеты на основе этой даты, например, добавлять 7 дней к этой дате или вычитать 7 дней из этой даты. Я пытался использовать STR_TO_DATE(SupplierDate, '%m/%d/%Y')
, чтобы преобразовать строку в дату, но значения возвращают только null
. Вырезки из моего представления:
case
when STR_TO_DATE(SupplierDate, '%m/%d/%Y') > curdate() then 'Out of Date'
end
Преобразуйте даты в строковом формате Sep/30/2025
в действительные форматы даты MySQL 2025-09-30
, чтобы я мог использовать их для выполнения вычислений с датами.
Ответ или решение
Чтобы конвертировать строковое представление даты формата Sep/30/2025
в формат даты MySQL YYYY-MM-DD
, вам необходимо использовать функцию STR_TO_DATE
с соответствующим форматом. В вашем случае, правильный формат для конверсии строки будет '%b/%d/%Y'
, где %b
соответствует сокращенному названию месяца.
Вот как вы можете это сделать в вашей представлении (view):
SELECT
SupplierDate,
STR_TO_DATE(SupplierDate, '%b/%d/%Y') AS ConvertedDate,
CASE
WHEN STR_TO_DATE(SupplierDate, '%b/%d/%Y') > CURDATE() THEN 'Out of Date'
ELSE 'In Date'
END AS DateStatus,
DATE_ADD(STR_TO_DATE(SupplierDate, '%b/%d/%Y'), INTERVAL 7 DAY) AS DatePlus7,
DATE_SUB(STR_TO_DATE(SupplierDate, '%b/%d/%Y'), INTERVAL 7 DAY) AS DateMinus7
FROM
YourTableName;
В этом запросе:
SupplierDate
— это ваша исходная строка даты.STR_TO_DATE(SupplierDate, '%b/%d/%Y')
конвертирует строку даты в формат даты MySQL.CASE
конструкция проверяет, больше ли преобразованная дата сегодняшней даты (полученной с помощьюCURDATE()
). Если да, то возвращается ‘Out of Date’, в противном случае ‘In Date’.DATE_ADD
иDATE_SUB
добавляют и вычитают 7 дней соответственно из преобразованной даты.
Убедитесь, что имя вашей таблицы заменено на YourTableName
в запросе. Проверьте результаты и убедитесь, что они соответствуют вашим ожиданиям. Если все сделано правильно, вы получите корректные значения дат, которые можно использовать для дальнейших вычислений.