Kuinka korjata & lsquo; muuntaminen epäonnistui muunnettaessa päivämäärä ja / tai aika merkkijonosta & rsquo; Virhe?

On monia tapauksia, joissa päivämäärät ja kellonajat eivät näy haluamassasi muodossa, eivätkä kyselylähdöt sovi katsojien tarpeisiin. On olemassa useita SQL Serverin sisäänrakennettuja ominaisuuksia, jotka muotoilevat päivämäärämerkkijonon tarpeidesi mukaan, mutta jotta SQL Server tulkitsisi merkkijonon ja muuntovirheiden välttämiseksi, sen tulisi olla oikeassa muodossa. Kun yritämme muuntaa päivämäärän tai kellonajan merkkijonosta, ilmenee joskus virhe. "Muunnos epäonnistui, kun päivämäärä ja / tai aika muunnettiin merkkijonosta."

päivämäärän ja ajan muuntovirhe

Edellä mainittu virhe ilmenee normaalisti, kun päivämääräliteraali ei ole oikea eikä sitä voi muuntaa merkkijonosta DateTime- tai date-päivämääräksi. Tämä virhe johtuu useista syistä, joista keskustelemme yksityiskohtaisesti yhdessä ratkaisusarjan kanssa.

Esimerkki 1:

Iso-Britannia Päivämäärän ja kellonajan merkinnät näyttävät päivämäärän päivä-kuukausi-vuosi-muodossa (10. tammikuuta 2015 tai 10.1.2015), jonka voimme saavuttaa käyttämällä SQL Server built_in -ominaisuuden "muuntaa" -toimintoa muotoilutyylillä 103.

Tässä alla olevassa esimerkissä voimme nähdä, että annettu päivämäärämerkkijono on väärässä muodossa. Ensinnäkin se antaa kuukauden, sitten päivät ja viimeisen vuoden, mikä on väärin ja jota SQL Server ei voi tulkita, mikä johtaa virheeseen. Iso-Britannian tyylin päivämäärän muuntamisen oikea muoto käyttäen 103-päivämäärätyyliä on "pp / kk / vvvv".

Väärä formaatti:

Ilmoita @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'valitse CONVERT (päivämäärä2, @date_time_value, 103) arvoksi UK_Date_Time_Style

Oikea muoto:

Ison-Britannian ja Ranskan päivämäärämuoto on 103 = "pp / kk / vvvv" tai 3 = "pp / kk / vv". Tässä 103 ja 3 ovat päivämäärätyylejä.

Ilmoita @date_time_value varchar (100) = '10 / 1/15 21:02:04 'valitse CONVERT (päivämäärä2, @date_time_value, 103) Date_Time_Style
Ilmoita @date_time_value varchar (100) = '10 / 1/15 21:02:04 'valitse CONVERT (päivämäärä2, @date_time_value, 3) arvoksi UK_Date_Time_Style

Esimerkki 2:

Joskus SQL-palvelimen merkkijonon päivämäärän muuntaminen johtaa virheisiin, ei käytettyjen päivämäärä- tai aikamuotojen takia, vaan siksi, että yrität tallentaa virheellisiä tietoja, joita järjestelmä ei hyväksy.

Väärä päivämäärä:

Seuraavan virheen syy on pelkästään se, että vuonna 2019 ei ole päivämäärää ”29. helmikuuta”, koska se ei ole karkausvuosi.

Ilmoita @date_time_value varchar (100) = '2019-02-29 21:02:04' valitse cast (@date_time_value päivämäärä2) date_time_value

Oikea:

Ilmoita @date_time_value varchar (100) = '2019-02-28 21:02:04' valitse cast (@date_time_value päivämäärä2) date_time_value

ISO 8601 -päivämäärä:

Vaikka päivämääräarvojen manipuloimiseksi on saatavana lukuisia muotoja, maailmanlaajuiselle / kansainväliselle massalle työskenneltäessä voi olla käyttökelpoisuusongelma valita päivämääräajan esitys. Joten kulttuurikohtaisia ​​päivämäärä / aika-literaaleja tulisi välttää. Jos pidämme tätä päivämäärää 03/08/2018, sitä tulkitaan eri tavoin eri puolilla maailmaa.

  • Ison-Britannian tyylillä se tulkitaan "8. maaliskuuta 2018"
  • Eurooppalaiseen tyyliin sitä tulkitaan "3. elokuuta 2018"

Onneksi ISO: n kehittämässä kansainvälisessä päivämäärämuodossa on yksi vaihtoehto. Maailmanlaajuinen ISO 8601 -muoto "VVVV-KK-PPNTh: mm: ss" on kielikohtaisempi vaihtoehto merkkijono-literaaleille ja se käsittelee kaikkia näitä kysymyksiä. Kun taas "yyyy" on vuosi, "mm" on kuukausi ja "dd" on päivä. Joten päivämäärä "8. maaliskuuta 2018" kansainvälisessä ISO-muodossa on kirjoitettu "2018-03-08". ISO-muoto on siis paras valinta päivämäärän esittämiseen.

Ilmoita @date_time_value varchar (100) = '2019-03-28 21:02:04' valitse muunna (päivämäärä2, @ date_time_value, 126) muodossa [vvvv-kk-ppThh: mi: ss.mmm]

Suositukset:

Toivottavasti tämä artikkeli auttaa lievittämään sekaannusta, jonka olen usein nähnyt yhteisössä päivämäärä / aika-arvoista. On kuitenkin suositeltavaa, ettet koskaan tallenna päivämääriä tekstityyppiin (varchar, char, nvarchar, nchar tai teksti). Päivämäärän arvo aina tallennetaan DATE, DATETIME ja mieluiten DATETIME2 (tarjoaa enemmän tarkkuutta) -tyyppisiin sarakkeisiin ja jätä päivämäärätietojen muotoilu käyttöliittymäkerrokseen sen sijaan, että se noudetaan tietokannasta.