A & lsquo; konvertálás sikertelensége a dátum és / vagy az idő karakterláncból történő konvertálásakor & rsquo; Hiba?

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 a dátumot vagy az időt karakterláncból konvertálni, 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

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 megjeleníti a dátumot a nap-hónap-év formátumban (2015. január 10. vagy 2015. január 1.), amelyet az SQL Server beépített_jellemző „convert” funkciójának használatával érhetünk el a 103. formázási stílusban.

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 az SQL Server nem tudja értelmezni, ami hibát eredményez. A brit stílus dátumátalakításának helyes formátuma a „103” dátumstílussal „éééé / 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

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

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 séma 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

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

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 esetén dolgozva használhatósági kérdés lehet a dátumidő-reprezentáció kiválasztása. Tehát a kultúrára jellemző dátum / idő literálokat kerülni kell. Ha ezt a dátumot „08/08/2018” -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óó: mm: ss” globális szabvány, az ISO 8601 formátum nyelvfüggetlenebb lehetőség a karakterláncok 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]

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.