Kuupäeva ja / või kellaaja teisendamisel märgistringilt nurjus & lsquo; teisendamine Viga?

On palju juhtumeid, kui 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

Eelpool mainitud viga tekib tavaliselt siis, kui kuupäevaliitliga pole õige ja seda ei saa stringist teisendada kuupäevaks või kellaajaks. See viga tuleneb mitmetest põhjustest, mida arutame üksikasjalikult koos lahenduskomplektiga.

Näide 1:

Ühendkuningriik Kuupäeva ja kellaaja tähistus kuvab kuupäeva kuu-kuu-aasta vormingus (10. jaanuar 2015 või 01.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 viimase aasta pakkumine, mis on vale ja mida SQL Server ei saa tõlgendada, mis põhjustab 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

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

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 sellepärast, 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)

Õige:

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

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õik need probleemid. Kusjuures "yyyy" on aasta, "mm" on kuu ja "dd" on päev. Nii et kuupäev “8. märts 2018” on rahvusvahelises ISO-vormingus kirjutatud “2018-03-08”. Seega on ISO-vorming kuupäeva esitamiseks parim valik.

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

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üübiks (varchar, char, nvarchar, nchar või text) Salvesta kuupäeva väärtus alati DATE, DATETIME ja soovitavalt DATETIME2 (pakub täpsust) tüüpi veergudesse ning jätke kuupäeva teabe vormindamine andmebaasist allalaadimise asemel kasutajaliidese kihile.