Hogyan lehet kijavítani a „Meghiúsult konverzió dátum és / vagy idő karakterláncból való alakításakor” hibát?



Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére

Sok esetben előfordul, hogy a dátumok és időpontok nem a kívánt formátumban jelennek meg, és egy lekérdezés sem felel meg a nézők igényeinek. Számos SQL Server beépített szolgáltatással formázhatja a dátum karakterláncot az Ön igényei szerint, de a karakterláncot az SQL Server értelmezze, és az átalakítási hibák elkerülése érdekében megfelelő formátumúnak kell lennie. Amikor megpróbáljuk konvertálni a dátumot vagy az időt karakterláncból, néha hiba lép fel. 'A konvertálás sikertelen, amikor a dátumot és / vagy az időt karakterláncból konvertálta.'



dátum és idő konverziós hiba

1. ábra: Dátum- és / vagy időátalakítási hiba a karakterláncból



A fent említett hiba általában akkor fordul elő, ha a dátum literál nem megfelelő, és nem lehet a karakterláncból konvertálni DateTime vagy dátumra. Ez a hiba számos okból származik, amelyeket a megoldáskészlettel együtt részletesen megvitatunk.



1. példa:

Egyesült Királyság A dátum és az idő jelölése a dátumot a nap-hónap-év formátumban (2015. január 10. vagy 2015. január 1.) jeleníti meg, amelyet az SQL Server beépített_jellemző „átalakítás” funkciójának használatával érhetünk el a 103. formázási stílus használatával.

Itt az alábbi példában láthatjuk, hogy a megadott dátum karakterlánc nem megfelelő formátumú. Először a hónapot, majd a napokat és a tavalyi évet adja meg, ami téves, és amelyet az SQL Server nem értelmezhet, ami hibát eredményez. A brit stílus dátumátalakításának helyes formátuma a „103” dátumstílussal a „nn / hh / éééé”.

Rossz formátum:

A @date_time_value varchar (100) = '15 / 16/2015 21:02:04 'deklarálja a CONVERT (datetime2, @date_time_value, 103) kiválasztását UK_Date_Time_Style

2. ábra: A hibás dátumformátum hibát eredményez



Helyes formátum:

A brit és francia dátumformátum 103 = “éééé / hh / éééé” vagy 3 = “éééé / hh / éé”. Itt 103 és 3 dátumstílus.

A @date_time_value varchar (100) = '10 / 1/15 21:02:04 'deklarálása válassza a CONVERT (datetime2, @date_time_value, 103) dátum_Time_Style értéket

3. ábra: Helyes dátumformátum „éééé / hh / éééé” brit / francia dátumstílussal

A @date_time_value varchar (100) = '10 / 1/15 21:02:04 'deklarálja a CONVERT (datetime2, @date_time_value, 3) kiválasztását UK_Date_Time_Style

4. ábra: Helyes dátumformátum „dd / mm / yy” brit / francia dátumstílussal

2. példa:

Előfordul, hogy az SQL szerveren a string-date konverzió hibát eredményez, nem a használt dátum- vagy időformátum miatt, sokkal inkább azért, mert helytelen információkat próbál meg tárolni, amelyek nem elfogadhatók a rendszer számára.

Rossz dátum:

A következő hiba oka pusztán az, hogy a 2019-es évben nincs olyan dátum, hogy „február 29.”, mert ez nem szökőév.

Deklarálja a @date_time_value varchar (100) = '2019-02-29 21:02:04' válasszon cast-ot (@date_time_value mint datetime2) a date_time_value értéket

5. ábra: A 2019-ben felvetett hiba nem szökőév, ezért annak dátuma nem február 29

Helyes:

Deklarálja a @date_time_value varchar (100) = '2019-02-28 21:02:04' válasszon cast-ot (@date_time_value mint datetime2) a date_time_value értéket

6. ábra: Helyes dátum

ISO 8601 dátumformátum:

Habár a dátumértékek manipulálására számos formátum áll rendelkezésre, globális / nemzetközi tömeg számára dolgozva használhatósági kérdés lehet a dátumidő-reprezentáció kiválasztása. Tehát kerülni kell a kultúrára jellemző dátum / idő literálokat. Ha ezt a dátumot „2018.08.08.” -Nak vesszük, akkor azt a világ különböző régióiban különböző módon fogják értelmezni.

  • Nagy-Britanniában „2018 március 8-ként” értelmezik
  • Európai stílusban úgy értelmezik, hogy „2018. augusztus 3.”

Szerencsére van egy alternatíva az ISO által kidolgozott nemzetközi dátumformátumban. Az „ÉÉÉÉ-HH-NNTóó: pp: ss” globális szabványos ISO 8601 formátum nyelvfüggetlenebb lehetőség a karakterlánc-literálok számára, és mindezeket a kérdéseket megoldja. Míg az „éééé” az év, az „mm” hónap és a „dd” a nap. Tehát a „2018. március 8.” dátumot nemzetközi ISO formátumban „2018-03-08” -nak írják. Így az ISO formátum a legjobb választás a dátumábrázoláshoz.

A @date_time_value varchar (100) = '2019-03-28 21:02:04' kijelölése konvertálás (datetime2, @ date_time_value, 126) kiválasztása [yyyy-mm-ddThh: mi: ss.mmm]

7. ábra: Nemzetközi szabvány ISO 8601 dátumformátum

Ajánlások:

Remélhetőleg ez a cikk segít enyhíteni azt a zavart, amelyet a közösségben gyakran láttam a dátum / idő értékekkel kapcsolatban. Javasoljuk azonban, hogy a dátumokat soha ne tárolja szövegtípusban (varchar, char, nvarchar, nchar vagy text) a felhasználói felület rétegébe ahelyett, hogy lekérnék az adatbázisból.

2 perc olvasás