Kaip išspręsti konversiją nepavyko konvertuojant datą ir (arba) laiką iš simbolių eilutės & rsquo; Klaida?

Yra daug atvejų, kai datos ir laikai nerodomi norimu formatu, taip pat užklausos išvestis neatitinka žiūrovų poreikių. Yra keletas „SQL Server“ įmontuotų funkcijų, kurios formatuoja datos eilutę pagal jūsų poreikius, tačiau kad eilutė būtų interpretuojama „SQL Server“ ir kad būtų išvengta konversijos klaidų, ji turėtų būti tinkamo formato. Kai bandome konvertuoti datą ar laiką iš simbolių eilutės, kartais atsiranda klaida. „Konvertuoti nepavyko konvertuojant datą ir (arba) laiką iš simbolių eilutės.“

datos ir laiko konvertavimo klaida

Pirmiau minėta klaida paprastai įvyksta, kai datos pažodinis žodis nėra tinkamas ir negali būti paverstas iš eilutės į DateTime arba date. Ši klaida atsiranda dėl daugelio priežasčių, kurias mes išsamiai aptarsime kartu su sprendimų rinkiniu.

1 pavyzdys:

Jungtinė Karalystė Datos ir laiko žymėjimas rodo datą dienos, mėnesio ir metų formatu (2015 m. Sausio 10 d. Arba 2015 m. Sausio 1 d.), Kurį galime pasiekti naudodami „SQL Server built_in“ funkcijos „konvertuoti“ funkciją su 103 formatavimo stiliumi.

Žemiau pateiktame pavyzdyje galime pamatyti, kad pateikta datos eilutė yra netinkamo formato. Pirma, nurodomas mėnuo, paskui dienos ir praėjusieji metai, kurie yra neteisingi ir kurių „SQL Server“ negali interpretuoti, o tai sukelia klaidą. Teisingas JK stiliaus datos konvertavimo formatas naudojant „103“ datos stilių yra „dd / mm / yyyy“.

Blogas formatas:

Paskelbkite @date_time_value varchar (100) = '15 / 16/2015 21:02:04 'pasirinkite CONVERT (datetime2, @date_time_value, 103) kaip UK_Date_Time_Style

Teisingas formatas:

Didžiosios Britanijos ir Prancūzijos datos formatas yra 103 = „dd / mm / yyyy“ arba 3 = „dd / mm / yy“. Čia 103 ir 3 yra datos stiliai.

Paskelbkite @date_time_value varchar (100) = '10 / 1/15 21:02:04 'pasirinkite CONVERT (datetime2, @date_time_value, 103) kaip Date_Time_Style
Paskelbkite @date_time_value varchar (100) = '10 / 1/15 21:02:04 'pasirinkite CONVERT (datetime2, @date_time_value, 3) kaip UK_Date_Time_Style

2 pavyzdys:

Kartais eilutės ir datos konvertavimas SQL serveryje sukelia klaidą, o ne dėl naudojamų datos ar laiko formatų, o todėl, kad bandote išsaugoti neteisingą schemai nepriimtiną informaciją.

Neteisinga data:

Šios klaidos priežastis yra ta, kad 2019 m. Nėra tokios datos kaip „vasario 29 d.“, Nes tai nėra keliamieji metai.

Paskelbkite @date_time_value varchar (100) = '2019-02-29 21:02:04' pasirinkite „cast“ (@ date_time_value kaip data time2) kaip date_time_value

Teisingas:

Paskelbkite @date_time_value varchar (100) = '2019-02-28 21:02:04' pasirinkite „Cast“ (@ date_time_value kaip data time2) kaip date_time_value

ISO 8601 datos formatas:

Nors manipuliuojant datos reikšmėmis yra daugybė formatų, dirbant pasaulinėje / tarptautinėje masėje, gali būti tinkamumo problema pasirinkti laiko ir laiko atstovavimą. Taigi reikėtų vengti konkrečios kultūros datos / laiko pažodžių. Jei šią datą laikysime „2018-08-03“, ji skirtinguose pasaulio regionuose bus aiškinama skirtingai.

  • JK stiliumi jis aiškinamas kaip „2018 m. Kovo 8 d.“
  • Europos stiliumi jis aiškinamas kaip „2018 m. Rugpjūčio 3 d.“

Laimei, tarptautiniame datos formate, kurį sukūrė ISO, yra viena alternatyva. Visuotinis standarto ISO 8601 formatas „MMMM-MM-DDThh: mm: ss“ yra labiau nuo kalbos nepriklausoma eilutinių literatų parinktis ir sprendžia visas šias problemas. „Yyyy“ yra metai, „mm“ yra mėnuo, o „dd“ yra diena. Taigi data „2018 m. Kovo 8 d.“ Tarptautiniu ISO formatu rašoma „2018-03-08“. Taigi ISO formatas yra geriausias pasirinkimas pateikiant datą.

Paskelbkite @date_time_value varchar (100) = '2019-03-28 21:02:04' pasirinkite konvertuoti (datetime2, @ date_time_value, 126) kaip [yyyy-mm-ddThh: mi: ss.mmm]

Rekomendacijos:

Tikimės, kad šis straipsnis padės sumažinti painiavą, kurią dažnai mačiau bendruomenėje dėl datos / laiko reikšmių. Tačiau rekomenduojama niekada nesaugoti datų teksto tipo („varchar“, „char“, „nvarchar“, „nchar“ arba „text“) datos reikšmę visada laikyti DATE, DATETIME ir pageidautina DATETIME2 (suteikia daugiau tikslumo) tipo stulpeliuose ir palikti datos informacijos formatavimą į vartotojo sąsajos sluoksnį, o ne iš duomenų bazės.