Kako ispraviti & lsquo; pretvorbu koja nije uspjela prilikom pretvaranja datuma i / ili vremena iz niza znakova & rsquo; Pogreška?

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. Kada 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

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

Primjer 1:

Ujedinjeno Kraljevstvo Oznake datuma i vremena prikazuju 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

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
Deklarirajte @date_time_value varchar (100) = '10 / 1/15 21:02:04 'odaberite CONVERT (datetime2, @date_time_value, 3) kao UK_Date_Time_Style

Primjer 2:

Ponekad pretvorba niza u datum na SQL poslužitelju rezultira pogreškom, ne zbog formata datuma ili vremena koji se koriste, već zato što pokušavate pohraniti netočne podatke koji nisu prihvatljivi 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

Ispravno:

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

Format datuma ISO 8601:

Iako su dostupni brojni formati za manipuliranje 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.

Deklarirajte @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]

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 tipa 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.

Preporučeno

Popravak: Minecraft ne reagira
Što je aplikacija za registraciju uređaja za digitalni TV tuner i treba li je ukloniti?
Što je FileRepMalware i biste li ga trebali ukloniti