Paano ayusin ang 'Nabigo ang Conversion kapag Nagko-convert ang Petsa at / o Oras mula sa Error ng String ng Character'?



Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema

Maraming mga pagkakataon kung kailan hindi lumitaw ang mga petsa at oras sa format na nais mong ito, o ang isang output output ay umaangkop sa mga pangangailangan ng mga manonood. Mayroong maraming mga built-in na tampok ng SQL Server upang mai-format ang string ng petsa ayon sa iyong pangangailangan ngunit para sa string na mabibigyang kahulugan ng SQL Server at upang maiwasan ang mga error sa conversion dapat ito sa isang tamang format. Kapag sinubukan naming i-convert ang petsa o oras mula sa pagkakasunud-sunod ng pagkakasunod-sunod ng pagkakamali ay lilitaw minsan. 'Nabigo ang conversion kapag nagko-convert ng petsa at / o oras mula sa string ng character.'



error sa oras ng pag-convert ng oras

Larawan 1: Petsa at / o error sa pag-convert ng oras mula sa string ng character



Ang error na nabanggit sa itaas ay normal na lumilitaw kapag ang petsa ng literal ay hindi wasto at hindi maaaring mai-convert mula sa string sa DateTime o petsa. Ang mga error na ito ay nagreresulta dahil sa isang bilang ng mga kadahilanan, na tatalakayin namin nang detalyado kasama ang hanay ng solusyon.



Halimbawa 1:

Ipinapakita ng notasyon ng United Kingdom ang petsa at oras ang petsa gamit ang format na day-month-year (Enero 10, 2015 o 10/1/2015) na maaari nating makamit ang paggamit ng built-in na tampok na 'convert' ng SQL Server na may istilo ng pag-format 103.

Dito sa halimbawa sa ibaba makikita natin na ang ibinigay na string ng petsa ay nasa maling format. Una, nagbibigay ito ng buwan, pagkatapos ng mga araw at sa huling taon na mali at hindi maaaring bigyang kahulugan ng SQL Server na nagreresulta sa isang error. Ang tamang format para sa pag-convert ng petsa ng istilo ng UK gamit ang '103' na istilo ng petsa ay 'dd / mm / yyyy'.

Maling format:

Ipahayag ang @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'piliin ang CONVERT (datetime2, @date_time_value, 103) bilang UK_Date_Time_Style

Larawan 2: Maling Format ng Petsa na nagreresulta sa isang error



Tamang Format:

Ang format ng petsa ng British at Pransya ay 103 = 'dd / mm / yyyy' o 3 = 'dd / mm / yy'. Narito ang 103 at 3 ay mga istilo ng petsa.

Ideklara ang @date_time_value varchar (100) = '10 / 1/15 21:02:04 'piliin ang CONVERT (datetime2, @date_time_value, 103) bilang Date_Time_Style

Larawan 3: Tamang Format ng Petsa na may 'dd / mm / yyyy' istilo ng British / French na petsa

Ipahayag ang @date_time_value varchar (100) = '10 / 1/15 21:02:04 'piliin ang CONVERT (datime2, @date_time_value, 3) bilang UK_Date_Time_Style

Larawan 4: Tamang Format ng Petsa na may 'dd / mm / yy' na istilo ng petsa ng British / Pransya

Halimbawa 2:

Minsan ang pag-convert ng string to date sa SQL server ay nagreresulta sa error, hindi dahil sa ginamit ang mga format ng petsa o oras, sa halip ay dahil sinusubukan mong iimbak ang maling impormasyon na hindi katanggap-tanggap sa pamamaraan.

Maling Petsa:

Ang dahilan para sa sumusunod na error ay lamang na sa taong 2019 walang ganoong petsa tulad ng '29 Pebrero' dahil hindi ito isang leap year.

Ipahayag ang @date_time_value varchar (100) = '2019-02-29 21:02:04' piliin ang cast (@date_time_value bilang datime2) bilang date_time_value

Larawan 5: Ang error na naitaas bilang 2019 ay hindi isang leap year, kaya wala itong 29 Pebrero bilang petsa

Tamang Isa:

Ipahayag ang @date_time_value varchar (100) = '2019-02-28 21:02:04' piliin ang cast (@date_time_value bilang datime2) bilang date_time_value

Larawan 6: Tamang petsa

Format ng Petsa ng ISO 8601:

Bagaman maraming mga format ang magagamit para sa pagmamanipula ng mga halaga ng petsa, kapag nagtatrabaho para sa isang pandaigdigang / pang-internasyonal na masa, maaari itong maging isang isyu sa kakayahang magamit upang pumili ng isang kinatawan ng datime. Kaya dapat iwasan ang mga literal na petsa / oras na tumutukoy sa kultura. Kung isasaalang-alang natin ang petsang ito na '03/08/2018', bibigyan ito ng kahulugan sa pagsunod sa iba't ibang mga paraan sa iba't ibang mga rehiyon ng mundo.

  • Sa istilo ng UK ito ay binibigyang kahulugan bilang 'ika-8 ng Marso 2018'
  • Sa istilong European ito ay binibigyang kahulugan bilang 'ika-3 ng Agosto 2018'

Sa kabutihang palad, mayroong isang kahalili sa format ng pang-internasyonal na petsa na binuo ng ISO. Ang pandaigdigang pamantayang format na ISO 8601 na 'YYYY-MM-DDThh: mm: ss' ay isang mas malayang opsyon sa wika para sa mga string literal at tinutugunan nito ang lahat ng mga isyung ito. Samakatuwid, ang 'yyyy' ay ang taon, ang 'mm' ay buwan at ang 'dd' ay araw. Kaya't ang petsang 'ika-8 ng Marso 2018' sa internasyonal na format na ISO ay nakasulat bilang '2018-03-08'. Sa gayon ang format na ISO ay ang pinakamahusay na pagpipilian para sa representasyon ng petsa.

Ipahayag ang @date_time_value varchar (100) = '2019-03-28 21:02:04' piliin ang pag-convert (datetime2, @ date_time_value, 126) bilang [yyyy-mm-ddThh: mi: ss.mmm]

Larawan 7: International Standard ISO 8601 na format ng petsa

Mga Rekumendasyon:

Inaasahan ko, ang artikulong ito ay makakatulong upang mapawi ang pagkalito na madalas kong nakita sa pamayanan tungkol sa mga halaga ng petsa / oras. Gayunpaman, inirerekumenda na huwag kailanman mag-imbak ng mga petsa sa uri ng teksto (varchar, char, nvarchar, nchar, o teksto) Palaging itabi ang halaga ng petsa sa DATE, DATETIME at mas mabuti DATETIME2 (nagbibigay ng mas eksaktong) mga uri ng haligi at, iwanan ang pag-format ng impormasyon ng petsa sa layer ng interface ng gumagamit sa halip na makuha mula sa database.

2 minuto basahin