Преобразование формата даты в SQL Server

#sql #sql-server #datetime

#sql #sql-сервер #дата и время

Вопрос:

У меня есть 2 таблицы, к которым я хочу присоединиться на основе даты, но формат даты, присутствующий в них обоих, отличается. В одной таблице дата указана как 10-10-2020, а в другой — 10-Oct-20. Мой предпочтительный формат будет 10-10-2020 или 10/10/2020. Как это может быть достигнуто с помощью SQL Server?

Комментарии:

1. Лучшим решением было бы сохранить даты в date типе данных. Если это невозможно, выполните преобразование в условии соединения.

2. Если вы сохраняете свои даты как даты, а не строки, у вас не будет этой проблемы. Поскольку вы, похоже, использовали строки, просто используйте convert или cast, чтобы убедиться, что они совпадают. Существуют сотни вопросов и ответов по преобразованию форматов дат.

Ответ №1:

Если возможно, измените столбец с версией «oct» на тот же тип, что и первый, или на столбец даты. Это упростит объединение, поскольку не требуется преобразовывать каждую строку.

Если это невозможно, вам нужен жестко запрограммированный перевод для (я полагаю) 12 разных строк, описывающих месяцы, с эквивалентным числом 1-12. Это позволит вам заменить часть «окт» числом. Затем вы должны иметь возможность использовать приведение (как дата), чтобы сделать его правильным столбцом даты.

Ответ №2:

Вы можете просто использовать try_cast() функцию, как показано ниже:

 select try_cast('10-Oct-20' as date)
  

Результат будет таким, как показано ниже:

 DtDate
-----------
2020-10-10
  

Для отображения даты в другом формате вы можете использовать один из методов, предложенных в этой ссылке.

Для простоты см. Следующий запрос:

 select convert(varchar(10), try_cast('10-Nov-20' as date), 10)  
select convert(varchar(10), try_cast('10-Nov-20' as date), 5)