Как да коригирам неуспешно преобразуване при преобразуване на дата и / или час от символен низ & rsquo; Грешка?

Има много случаи, когато датите и часовете не се показват във формата, който искате да бъде, нито изходът на заявка отговаря на нуждите на зрителите. Има няколко вградени функции на SQL Server за форматиране на низа за дата според вашите нужди, но за да бъде интерпретиран низът от SQL Server и за да се избегнат грешки при преобразуване, той трябва да бъде в подходящ формат. Когато се опитваме да преобразуваме дата или час от символен низ, понякога възниква грешка. „Преобразуването не бе успешно при преобразуване на дата и / или час от символен низ.“

грешка при преобразуване на дата и час

Споменатата по-горе грешка обикновено възниква, когато литералът за дата не е правилен и не може да бъде преобразуван от низа в DateTime или date. Тази грешка се дължи на редица причини, които ще обсъдим подробно заедно с набора от решения.

Пример 1:

Великобритания Нотация на дата и час показва датата, като използва формата ден-месец-година (10 януари 2015 г. или 10/1/2015), което можем да постигнем, използвайки функцията за преобразуване на функция за конвертиране на SQL Server вградена функция със стил на форматиране 103.

Тук в примера по-долу можем да видим, че предоставеният низ за дата е в грешен формат. Първо, той предоставя месеца, след това дните и последната година, което е грешно и не може да бъде интерпретирано от SQL Server, което води до грешка. Правилният формат за преобразуване на дати във Великобритания, използващ стил на дата „103“, е „дд / мм / гггг“.

Грешен формат:

Декларирайте @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'изберете CONVERT (datetime2, @date_time_value, 103) като UK_Date_Time_Style

Правилен формат:

Британският и френският формат на датата е 103 = „дд / мм / гггг“ или 3 = „дд / мм / ггг“. Тук 103 и 3 са стилове на дати.

Декларирайте @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 'изберете CONVERT (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 като datetime2) като date_time_value

Правилен:

Декларирайте @date_time_value varchar (100) = '2019-02-28 21:02:04' изберете гласове (@date_time_value като datetime2) като date_time_value

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

Въпреки че са налични множество формати за манипулиране на стойности на датата, когато работите за глобална / международна маса, може да възникне проблем с използваемостта при избора на представяне на дата и час. Така че специфичните за културата литерали за дата / час трябва да се избягват. Ако считаме тази дата за „03/08/2018“, тя ще бъде интерпретирана по различни начини в различните региони на света.

  • В британски стил се тълкува като „8 март 2018 г.“
  • В европейски стил се тълкува като „3 август 2018 г.“

За щастие има една алтернатива в международния формат за дати, разработен от ISO. Глобалният стандартен формат ISO 8601 „ГГГГ-ММ-ДДТх: мм: сс“ е по-независима от езика опция за низови литерали и разглежда всички тези проблеми. Докато „гггг“ е годината, „мм“ е месец, а „дд“ е ден. Така че датата „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 или текст) Винаги съхранявайте стойността на датата в колони тип DATE, DATETIME и за предпочитане DATETIME2 (осигурява по-голяма точност) и оставете форматирането на информацията за датата към слоя на потребителския интерфейс, вместо да бъде извлечен от базата данни.