#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)