Hvordan fikser jeg ‘Konvertering mislyktes når konvertering av dato og / eller tid fra tegnstreng’ feil?



Prøv Instrumentet Vårt For Å Eliminere Problemer

Det er mange tilfeller når datoer og klokkeslett ikke vises i det formatet du vil at det skal være, og heller ikke en spørreutgang som passer til seernes behov. Det er flere SQL Server innebygde funksjoner for å formatere datostrengen etter ditt behov, men for strengen skal tolkes av SQL Server og for å unngå konverteringsfeil, bør den være i riktig format. Når vi prøver å konvertere dato eller tid fra tegnstreng, oppstår følgende feil noen ganger. 'Konvertering mislyktes når du konverterte dato og / eller tid fra tegnstreng.'



feil dato for konvertering av dato

Figur 1: Dato- og / eller tidskonverteringsfeil fra tegnstrengen



Feilen som er nevnt ovenfor, oppstår vanligvis når bokstavelig dato ikke er riktig og ikke kan konverteres fra strengen til DateTime eller date. Denne feilen skyldes flere årsaker, som vi vil diskutere i detalj sammen med løsningssettet.



Eksempel 1:

Storbritannia Dato- og klokkeslettnotering viser datoen ved å bruke formatet dag-måned-år (10. januar 2015 eller 10/1/2015) som vi kan oppnå ved hjelp av SQL Server innebygd funksjon 'konvertere' med formateringsstil 103.

Her i eksemplet nedenfor kan vi se at den angitte datostrengen er i feil format. Først er det å gi måned, så dager og i fjor som er galt og ikke kan tolkes av SQL Server, noe som resulterer i en feil. Riktig format for konvertering av britisk stildato ved bruk av “103” dato stil er “dd / mm / åååå”.

Feil format:

Erklær @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'velg CONVERT (datetime2, @date_time_value, 103) som UK_Date_Time_Style

Figur 2: Feil datoformat som resulterer i en feil



Riktig format:

Det britiske og franske datoformatet er 103 = 'dd / mm / åååå' eller 3 = 'dd / mm / åå'. Her er 103 og 3 datostiler.

Deklarer @date_time_value varchar (100) = '10 / 1/15 21:02:04 'velg CONVERT (datetime2, @date_time_value, 103) som Date_Time_Style

Figur 3: Riktig datoformat med “dd / mm / åååå” britisk / fransk datostil

Deklarer @date_time_value varchar (100) = '10 / 1/15 21:02:04 'velg CONVERT (datetime2, @date_time_value, 3) som UK_Date_Time_Style

Figur 4: Riktig datoformat med “dd / mm / åå” britisk / fransk datostil

Eksempel 2:

Noen ganger resulterer konvertering av streng til dato i SQL-server i feil, ikke på grunn av dato- eller tidsformatene som brukes, snarere er det fordi du prøver å lagre feil informasjon som ikke er akseptabel for ordningen.

Feil dato:

Årsaken til følgende feil er bare at det i 2019 ikke er noen dato som “29. februar” fordi det ikke er et skuddår.

Deklarer @date_time_value varchar (100) = '2019-02-29 21:02:04' velg rollebesetning (@date_time_value som datetime2) som date_time_value

Figur 5: Feil hevet da 2019 ikke er et skuddår, så den har ikke 29. februar som dato

Riktig en:

Deklarer @date_time_value varchar (100) = '2019-02-28 21:02:04' velg rollebesetning (@date_time_value som datetime2) som date_time_value

Figur 6: Riktig dato

ISO 8601 Datoformat:

Selv om mange formater er tilgjengelige for å manipulere datoverdier, kan det være et brukervennlig problem å velge en datetime-representasjon når du arbeider for en global / internasjonal masse. Så kulturspesifikke dato- / klokkeslettbokstaver bør unngås. Hvis vi betrakter denne datoen som “03.08.2018”, vil den tolkes på følgende måter i forskjellige regioner i verden.

  • I britisk stil tolkes det som '8. mars 2018'
  • I europeisk stil tolkes det som '3. august 2018'

Heldigvis er det ett alternativ i det internasjonale datoformatet utviklet av ISO. Den globale standarden ISO 8601-formatet 'ÅÅÅÅ-MM-DDThh: mm: ss' er et mer språkuavhengig alternativ for strengbokstaver, og det adresserer alle disse problemene. Mens 'åååå' er året, er 'mm' måned og 'dd' er dag. Så datoen “8. mars 2018” i internasjonalt ISO-format er skrevet som “2018-03-08”. Dermed er ISO-format det beste valget for datorepresentasjon.

Deklarer @date_time_value varchar (100) = '2019-03-28 21:02:04' velg convert (datetime2, @ date_time_value, 126) som [åååå-mm-ddThh: mi: ss.mmm]

Figur 7: Internasjonal standard ISO 8601 datoformat

Anbefalinger:

Forhåpentligvis vil denne artikkelen være med på å lindre forvirringen jeg ofte har sett i samfunnet om verdier for dato / tid. Det anbefales imidlertid at du aldri lagrer datoene i teksttype (varchar, char, nvarchar, nchar eller text) Alltid lagre datoverdien i kolonnene DATE, DATETIME og helst DATETIME2 (gir mer presisjon) og la datoinformasjonsformateringen til brukergrensesnittlaget i stedet for å bli hentet fra databasen.

2 minutter lest