Cum se remediază conversia eșuată la conversia datei și / sau a orei din șirul de caractere & rsquo; Eroare?

Există multe cazuri în care datele și orele nu apar în formatul dorit, și nici o ieșire de interogare nu se potrivește cu nevoile spectatorilor. Există mai multe caracteristici încorporate ale SQL Server pentru a formata șirul de date în funcție de nevoile dvs., dar șirul să fie interpretat de SQL Server și pentru a evita erorile de conversie ar trebui să fie într-un format adecvat. Când încercăm să convertim data sau ora din șirul de caractere, apare uneori eroarea. „Conversia nu a reușit la conversia datei și / sau a orei din șirul de caractere.”

eroare de conversie a datei și orei

Eroarea menționată mai sus apare în mod normal atunci când literalul de dată nu este corect și nu poate fi convertit din șir în DateTime sau data. Această eroare rezultă din mai multe motive, pe care le vom discuta în detaliu împreună cu setul de soluții.

Exemplul 1:

Marea Britanie Notarea dată și oră afișează data utilizând formatul zi-lună-an (10 ianuarie 2015 sau 10/1/2015) pe care îl putem realiza folosind funcția „converti” a caracteristicii SQL Server built_in cu stilul de formatare 103.

Aici, în exemplul de mai jos, putem vedea că șirul de date furnizat este în format greșit. În primul rând, furnizează luna, apoi zilele și anul trecut, ceea ce este greșit și nu poate fi interpretat de SQL Server, ceea ce duce la o eroare. Formatul corect pentru conversia datei stilului britanic folosind stilul de dată „103” este „zz / ll / aaaa”.

Format gresit:

Declarați @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'selectați CONVERT (datetime2, @date_time_value, 103) ca UK_Date_Time_Style

Format corect:

Formatul de dată britanic și francez este 103 = „zz / ll / aaaa” sau 3 = „zz / ll / aa”. Aici 103 și 3 sunt stiluri de dată.

Declarați @date_time_value varchar (100) = '10 / 1/15 21:02:04 'selectați CONVERT (datetime2, @date_time_value, 103) ca Date_Time_Style
Declarați @date_time_value varchar (100) = '10 / 1/15 21:02:04 'selectați CONVERT (datetime2, @date_time_value, 3) ca UK_Date_Time_Style

Exemplul 2:

Uneori, conversia șir la dată în serverul SQL are ca rezultat o eroare, nu din cauza formatelor de dată sau oră utilizate, ci mai degrabă pentru că încercați să stocați informații incorecte care nu sunt acceptate de schemă.

Data greșită:

Motivul următoarei erori este doar faptul că în anul 2019 nu există o dată ca „29 februarie”, deoarece nu este un an bisect.

Declarați @date_time_value varchar (100) = '2019-02-29 21:02:04' selectați distribuirea (@date_time_value ca datetime2) ca data_time_value

Unul corect:

Declarați @date_time_value varchar (100) = '2019-02-28 21:02:04' selectați distribuirea (@date_time_value ca datetime2) ca data_time_value

ISO 8601 Format de dată:

Deși sunt disponibile numeroase formate pentru manipularea valorilor datei, atunci când se lucrează pentru o masă globală / internațională, poate fi o problemă de utilizare să alegeți o reprezentare datetime. Deci, literele de dată / oră specifice culturii ar trebui evitate. Dacă luăm în considerare această dată „03/08/2018”, aceasta va fi interpretată în următoarele moduri diferite în diferite regiuni ale lumii.

  • În stilul Marii Britanii este interpretat ca „8 martie 2018”
  • În stil european este interpretat ca „3 august 2018”

Din fericire, există o alternativă în formatul de dată internațional dezvoltat de ISO. Standardul global ISO 8601 format „AAAA-MM-ZZZ: mm: ss” este o opțiune mai independentă de limbă pentru literele șirului și abordează toate aceste probleme. În timp ce „aaaa” este anul, „mm” este luna și „zg” este ziua. Deci, data „8 martie 2018” în format ISO internațional este scrisă ca „2018-03-08”. Astfel formatul ISO este cea mai bună alegere pentru reprezentarea datei.

Declare @date_time_value varchar (100) = '2019-03-28 21:02:04' selectează convert (datetime2, @ date_time_value, 126) ca [aaaa-mm-ddThh: mi: ss.mmm]

Recomandări:

Sperăm că acest articol va ajuta la ameliorarea confuziei pe care am văzut-o frecvent în comunitate cu privire la valorile datei / orei. Cu toate acestea, se recomandă să nu stocați niciodată datele în tip text (varchar, char, nvarchar, nchar sau text) Stocați întotdeauna valoarea datei în DATE, DATETIME și, de preferință, DATETIME2 (oferă mai multă precizie) și lăsați formatarea informațiilor despre dată la stratul de interfață cu utilizatorul în loc să fie preluat din baza de date.