MySQL — значение переменной на СЕГОДНЯШНИЙ ДЕНЬ возвращает значение null

#mysql #sql #string #date #datetime

#mysql #sql #строка #Дата #дата-время

Вопрос:

Использование локального подключения к хранилищу в точке данных Toad. Он настроен на использование MYSQL.

EXTRACT_DATE — это varchar(20) в формате: 08282020

Пытаюсь изменить этот формат, чтобы он отображался как 08/28/2020 в моем наборе результатов. Тем не менее, я продолжал получать {null} возвращенный.

Я пробовал множество различных методов (см. Код ниже)введите описание изображения здесь, но продолжаю получать тот же результат.

 SELECT
     EXTRACT_DATE,    
    DATE_FORMAT(EXTRACT_DATE, '%m/%d/%Y') AS NEW_DT,    
    STR_TO_DATE(EXTRACT_DATE, '%m/%d/%Y') AS NEW_DT2,    
    CONVERT (EXTRACT_DATE, DATE) AS NEW_DT3    
FROM USERTABLE   
GROUP BY EXTRACT_DATE
  

Ответ №1:

STR_TO_DATE превращает строку в дату. Чтобы отформатировать результат, примените DATE_FORMAT вот так:

 select DATE_FORMAT( STR_TO_DATE('08282020', '%m%d%Y'),'%m/%d/%Y')  AS NEW_DT from dual
  

Ответ №2:

Я думаю, что проще и эффективнее использовать функции sring:

 concat_ws(
    '/',
    substring(extract_date, 1, 2),
    substring(extract_date, 3, 2),
    substring(extract_date, 5, 4)
) as new_dt
  

Или:

 concat_ws(
    '/', 
    left(extract_date, 2), 
    substring(extract_date, 3, 2), 
    right(extract_date, 4)
) as new_dt
  

Что касается запроса, который вы хотели написать: сначала вам нужно преобразовать в дату, а затем обратно в строку. Итак:

 date_format(str_to_date(extract_date, '%m%d%Y'), '%m/%d/%Y')