Как исправить ошибку «Сбой преобразования при преобразовании даты и / или времени из строки символов»?

Во многих случаях дата и время не отображаются в желаемом формате, а результаты запроса не соответствуют потребностям зрителей. Существует несколько встроенных функций SQL Server для форматирования строки даты в соответствии с вашими потребностями, но для того, чтобы строка интерпретировалась SQL Server и во избежание ошибок преобразования, она должна быть в правильном формате. Когда мы пытаемся преобразовать дату или время из символьной строки, иногда возникает следующая ошибка. «Ошибка преобразования при преобразовании даты и/или времени из символьной строки.»

Вышеупомянутая ошибка обычно возникает, когда литерал даты неверен и не может быть преобразован из строки в DateTime или дату. Эта ошибка возникает по ряду причин, которые мы подробно обсудим вместе с набором решений.

Пример 1:

Соединенное Королевство В обозначении даты и времени дата отображается в формате день-месяц-год (10 января 2015 г. или 01.10.2015). мы можем добиться использования функции «convert» встроенной функции SQL Server со стилем форматирования 103.

Здесь, в приведенном ниже примере, мы видим, что предоставленная строка даты имеет неправильный формат. Во-первых, он предоставляет месяц, затем дни и последний год, что неверно и не может быть интерпретировано SQL Server, что приводит к ошибке. Правильный формат для преобразования даты в стиле Великобритании с использованием стиля даты «103» — «дд/мм/гггг».

Неправильный формат:

 Declare @date_time_value varchar (100) = '10/16/2015 21:02:04 'выберите CONVERT (datetime2, @date_time_value, 103) как UK_Date_Time_Style 

Британский и французский формат даты: 103 = «dd/mm/ гггг »или 3 =« дд/мм/гг ». Здесь 103 и 3 — стили даты.

 Declare @date_time_value varchar (100) = '10/1/15 21: 02: 04 'выберите CONVERT (datetime2, @date_time_value, 103) как Date_Time_Style 

 Объявить @date_time_value varchar (100) = '10/1/15 21: 02: 04 'выбрать  ПРЕОБРАЗОВАТЬ (datetime2, @date_time_value, 3) как UK_Date_Time_Style 

Пример 2:

Иногда преобразование строки в дату на сервере SQL приводит к ошибке не из-за используемых форматов даты или времени, а из-за того, что вы пытаетесь сохранить неверную информацию, неприемлемую для схема.

Неправильная дата:

Причина следующей ошибки проста в том, что в 2019 году нет такой даты, как «29 февраля», потому что это не високосный год.

 Объявить  @date_time_value varchar (100) = '2019-02-29 21:02:04' выберите приведение (@date_time_value как дату  time2) как date_time_value 

Правильный вариант:

 Объявить @date_time_value varchar (100) = '2019-02-28 21: 02: 04'select  приведение (@date_time_value как datetime2) как date_time_value 

Формат даты ISO 8601:

Несмотря на то, что для управления значениями дат доступны многочисленные форматы, при работе с глобальной/международной массой выбор представления datetime может стать проблемой для удобства использования. Таким образом, дата и время, зависящие от языка и региональных параметров Следует избегать литералов. Если мы считаем эту дату «08.03.2018», она будет интерпретироваться по-разному в разных регионах мира.

  • В британском стиле интерпретируется как «8 марта 2018 года».
  • В европейском стиле это интерпретируется как «3 августа 2018 года».

К счастью, есть один альтернатива в международном формате даты, разработанном ISO. Формат глобального стандарта ISO 8601 «ГГГГ-ММ-ДДTчч: мм: сс» является более независимым от языка вариантом для строкового облегчения. rals, и он решает все эти проблемы. В то время как «гггг» — это год, «мм» — месяц, а «дд» — день. Таким образом, дата «8 марта 2018 года» в международном формате ISO записывается как «2018-03-08». Таким образом, формат ISO — лучший выбор для представления даты.

 Объявить @date_time_value varchar (100) = '2019-03-28 21: 02: 04'select convert (datetime2, @ date_time_value, 126)  как [yyyy-mm-ddThh: mi: ss.mmm] 

Рекомендации :

Надеюсь, эта статья поможет избавиться от путаницы, которую я часто видел в сообществе относительно значений даты и времени. Однако рекомендуется никогда не хранить даты в текстовом виде (varchar, char, nvarchar, nchar или text). Всегда сохранять значение даты в столбцах типа DATE, DATETIME и предпочтительно DATETIME2 (обеспечивает большую точность) и оставить форматирование информации о дате. на уровень пользовательского интерфейса вместо получения из базы данных.

Оцените статью
techscreen.ru
Добавить комментарий