Kuidas parandada viga „Konverteerimine ebaõnnestus, kui teisendati tähemärgist kuupäev ja / või kellaaeg”?



Proovige Meie Instrumenti Probleemide Kõrvaldamiseks

On palju juhtumeid, kus kuupäevad ja kellaajad ei ilmu soovitud vormingus, samuti ei sobi päringu väljund vaatajate vajadustega. Kuupäeva stringi vormindamiseks vastavalt teie vajadustele on mitu SQL Serveri sisseehitatud funktsiooni, kuid selleks, et stringi tõlgendaks SQL Server ja teisendusvigade vältimiseks peaks see olema õiges vormingus. Kui proovime tähemärgist kuupäeva või kellaaega teisendada, tekib mõnikord viga. 'Kuupäeva ja / või kellaaja stringist teisendamisel nurjus teisendamine.'



kuupäeva ja kellaaja teisendusviga

Joonis 1: kuupäevade ja / või kellade teisendamise viga tähemärgist



Eespool nimetatud tõrge ilmneb tavaliselt siis, kui kuupäevaliitliga pole õige ja seda ei saa stringist teisendada kuupäevaks või kellaajaks. See viga tuleneb mitmest põhjusest, mida arutame üksikasjalikult koos lahenduskomplektiga.



Näide 1:

Ühendkuningriik Kuupäeva ja kellaaja tähistus kuvab kuupäeva kuu-aasta-aasta vormingus (10. jaanuar 2015 või 10.01.2015), mille saame saavutada SQL Serveri sisseehitatud funktsiooni „teisendamine” abil vormindamisstiiliga 103.

Siit allpool toodud näites näeme, et esitatud kuupäeva string on vales vormingus. Esiteks on see kuu, seejärel päevade ja eelmise aasta esitamine, mis on vale ja mida SQL Server ei saa tõlgendada, mis toob kaasa vea. Suurbritannia stiili kuupäevade teisendamise õige vorming, kasutades kuupäevastiili „103”, on „pp / kk / aaaa”.

Vale vorming:

Deklareerige varchar @date_time_value (100) = '10 / 16/2015 21:02:04 'valige CONVERT (kuupäeva2, @kuupäeva_aja_väärtus, 103) kui UK_Date_Time_Style

Joonis 2: Vale kuupäeva vorming, mille tulemuseks on viga



Õige vorming:

Suurbritannia ja Prantsusmaa kuupäevavorming on 103 = “pp / kk / aaaa” või 3 = “pp / kk / aaa”. Siin on 103 ja 3 kuupäevastiilid.

Deklareeri varchar @date_time_value (100) = '10 / 1/15 21:02:04 'ja vali CONVERT (datetime2, @date_time_value, 103) Date_Time_Style

Joonis 3: õige kuupäevavorming „pp / kk / aaaa“ briti / prantsuse kuupäevastiiliga

Deklareeri varchar @date_time_value (100) = '10 / 1/15 21:02:04 ', vali CONVERT (kuupäev2, @kuupäeva_aja_väärtus, 3) kui UK_Date_Time_Style

Joonis 4: õige kuupäevavorming 'pp / kk / aaa' briti / prantsuse kuupäevastiiliga

Näide 2:

Mõnikord põhjustab stringi kuupäeva teisendamine SQL serveris vea, mitte kasutatud kuupäeva või kellaaja vormingute tõttu, pigem seetõttu, et proovite salvestada vale teavet, mis pole skeemile vastuvõetav.

Vale kuupäev:

Järgmise vea põhjus on pelgalt see, et aastal 2019 ei ole sellist kuupäeva nagu “29. veebruar”, sest see pole liigaasta.

Deklareeri varchar @date_time_value (100) = '2019-02-29 21:02:04' vali cast (kuupäeva_aja_väärtus kuupäeva2 väärtusena @ date_time_value)

Joonis 5: 2019. aastaks tõstatatud viga ei ole liigaasta, seega pole selle kuupäevaks 29. veebruar

Õige:

Deklareeri varchar @date_time_value (100) = '2019-02-28 21:02:04' vali cast (kuupäeva_aja_väärtus kuupäeva2 väärtusena kuupäev2)

Joonis 6: õige kuupäev

ISO 8601 kuupäeva vorming:

Kuigi kuupäevaväärtuste manipuleerimiseks on saadaval arvukalt vorminguid, võib globaalse / rahvusvahelise massi jaoks töötades olla kuupäevaaja esituse valimine kasutatavuse probleem. Seega tuleks vältida kultuurispetsiifilisi kuupäeva / kellaaja literaale. Kui arvestada seda kuupäeva „03/08/2018“, tõlgendatakse seda maailma erinevates piirkondades erinevalt.

  • Suurbritannia stiilis tõlgendatakse seda kui “8. märts 2018”
  • Euroopa stiilis tõlgendatakse seda kui “3. august 2018”

Õnneks on ISO väljatöötatud rahvusvahelises kuupäevavormingus üks alternatiiv. Ülemaailmne standardi ISO 8601 vorming „AAAA-KK-PPNTh: mm: ss” on stringiliteratiivide jaoks keelest sõltumatum variant ja see lahendab kõiki neid probleeme. Kusjuures 'yyyy' on aasta, 'mm' on kuu ja 'dd' on päev. Nii kirjutatakse rahvusvahelises ISO-vormingus kuupäev “8. märts 2018” kui “2018-03-08”. Seega on ISO-vorming kuupäeva esitamiseks parim valik.

Deklareeri varchar @date_time_value (100) = '2019-03-28 21:02:04' vali teisenda (kuupäev2, @ kuupäeva_aja_väärtus, 126) kui [aaaa-kk-ppThh: mi: ss.mmm]

Joonis 7: rahvusvahelise standardi ISO 8601 kuupäevavorming

Soovitused:

Loodetavasti aitab see artikkel leevendada segadust, mida olen kogukonnas sageli näinud kuupäeva / kellaaja väärtuste osas. Siiski on soovitatav mitte kunagi salvestada kuupäevi tekstitüüpi (varchar, char, nvarchar, nchar või tekst). Kuupäeva väärtus tuleb alati salvestada DATE, DATETIME ja soovitavalt DATETIME2 (pakub täpsust) tüüpi veergudesse ja jätta kuupäeva teabe vormindamine andmebaasist allalaadimise asemel kasutajaliidese kihile.

2 minutit loetud