Kako ispraviti pogrešku 'Pretvorba nije uspjela prilikom pretvaranja datuma i / ili vremena iz niza znakova'?



Isprobajte Naš Instrument Za Uklanjanje Problema

Mnogo je slučajeva kada se datumi i vremena ne pojavljuju u formatu kakav želite, niti izlazni upit odgovara potrebama gledatelja. Postoji nekoliko ugrađenih značajki SQL Servera za formatiranje niza datuma prema vašoj potrebi, ali da bi SQL Server interpretirao niz i kako bi izbjegao pogreške pretvorbe, trebao bi biti u ispravnom formatu. Kad pokušavamo pretvoriti datum ili vrijeme iz niza znakova, ponekad se pojavi sljedeća pogreška. 'Pretvorba nije uspjela prilikom pretvaranja datuma i / ili vremena iz niza znakova.'



pogreška pretvorbe datuma

Slika 1: Pogreška pretvorbe datuma i / ili vremena iz niza znakova



Gore spomenuta pogreška obično se javlja kada doslovni datum nije ispravan i ne može se pretvoriti iz niza u DateTime ili date. Ova se pogreška javlja iz više razloga, o kojima ćemo detaljno razgovarati zajedno sa skupom rješenja.



Primjer 1:

Ujedinjeno Kraljevstvo Oznaka datuma i vremena prikazuje datum u formatu dan-mjesec-godina (10. siječnja 2015. ili 10.1.2015.), Što možemo postići pomoću funkcije pretvorbe značajke SQL Converter_in 'pretvori' sa stilom oblikovanja 103.

Ovdje u primjeru u nastavku možemo vidjeti da je navedeni datumski niz u pogrešnom formatu. Prvo, pruža mjesec, zatim dane i prošlu godinu, što je pogrešno i ne može ga SQL Server protumačiti što rezultira pogreškom. Ispravan format za pretvorbu datuma u stilu Ujedinjenog Kraljevstva pomoću stila datuma '103' je 'dd / mm / yyyy'.

Krivi format:

Deklarirajte @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'odaberite CONVERT (datetime2, @date_time_value, 103) kao UK_Date_Time_Style

Slika 2: Pogrešan format datuma koji rezultira pogreškom



Ispravan format:

Britanski i francuski format datuma je 103 = 'dd / mm / yyyy' ili 3 = 'dd / mm / yyy'. Ovdje su 103 i 3 stilovi datuma.

Deklarirajte @date_time_value varchar (100) = '10 / 1/15 21:02:04 'odaberite CONVERT (datetime2, @date_time_value, 103) kao Date_Time_Style

Slika 3: Ispravan format datuma s britanskim / francuskim stilom datuma „dd / mm / yyyy“

Deklarirajte @date_time_value varchar (100) = '10 / 1/15 21:02:04 'odaberite CONVERT (datetime2, @date_time_value, 3) kao UK_Date_Time_Style

Slika 4: Ispravan format datuma s britanskim / francuskim stilom datuma „dd / mm / yy“

Primjer 2:

Ponekad pretvorba niza u datum na SQL poslužitelju rezultira pogreškom, ne zbog korištenih formata datuma ili vremena, već zato što pokušavate pohraniti netočne informacije koje nisu prihvatljive za shemu.

Pogrešan datum:

Razlog za sljedeću pogrešku je samo taj što u 2019. godini ne postoji datum kao što je „29. veljače“ jer to nije prijestupna godina.

Deklariraj @date_time_value varchar (100) = '2019-02-29 21:02:04' odaberite cast (@date_time_value kao datetime2) kao date_time_value

Slika 5: Pogreška nastala jer 2019. nije prijestupna godina, pa kao datum nema 29. veljače

Ispravno:

Deklariraj @date_time_value varchar (100) = '2019-02-28 21:02:04' odaberite cast (@date_time_value kao datetime2) kao date_time_value

Slika 6: Točan datum

Format datuma ISO 8601:

Iako su dostupni brojni formati za manipulaciju datumskim vrijednostima, kada radite za globalnu / međunarodnu masu, odabir datuma i vremena može predstavljati problem upotrebljivosti. Dakle, treba izbjegavati literaturu datuma / vremena specifičnu za kulturu. Ako ovaj datum smatramo '08.08.2018.', On će se u različitim regijama svijeta tumačiti na različite načine.

  • U britanskom se stilu tumači kao „8. ožujka 2018“
  • U europskom se stilu tumači kao '3. kolovoza 2018'

Srećom, postoji jedna alternativa u međunarodnom formatu datuma koji je razvio ISO. Globalni standardni format ISO 8601 'GGGG-MM-DDThh: mm: ss' više je jezično neovisna opcija za string literale i rješava sva ta pitanja. Dok je „yyyy“ godina, „mm“ je mjesec, a „dd“ je dan. Dakle, datum „8. ožujka 2018.“ u međunarodnom ISO formatu zapisan je kao „2018-03-08“. Stoga je ISO format najbolji izbor za predstavljanje datuma.

Proglasite @date_time_value varchar (100) = '2019-03-28 21:02:04' odaberite pretvori (datetime2, @ date_time_value, 126) kao [gggg-mm-ddThh: mi: ss.mmm]

Slika 7: Međunarodni standardni format datuma ISO 8601

Preporuke:

Nadam se da će ovaj članak pomoći u uklanjanju zabune koju sam često vidio u zajednici oko vrijednosti datuma / vremena. Međutim, preporučuje se da datume nikada ne pohranjujete u tekstualnom tipu (varchar, char, nvarchar, nchar ili tekst) Uvijek pohranite vrijednost datuma u stupce DATE, DATETIME i po mogućnosti DATETIME2 (pruža veću preciznost) i ostavite oblikovanje podataka o datumu na sloj korisničkog sučelja umjesto da se preuzme iz baze podataka.

2 minute čitanja