& lsquo; 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환 실패 & rsquo;를 수정하는 방법 오류?

날짜와 시간이 원하는 형식으로 나타나지 않거나 쿼리 출력이 뷰어의 요구에 맞지 않는 경우가 많습니다. 필요에 따라 날짜 문자열의 형식을 지정하는 몇 가지 SQL Server의 기본 제공 기능이 있지만 SQL Server에서 문자열을 해석하고 변환 오류를 방지하려면 올바른 형식이어야합니다. 문자열에서 날짜 또는 시간을 변환하려고 할 때 가끔 오류가 발생합니다. "문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환에 실패했습니다."

날짜 시간 변환 오류

위에서 언급 한 오류는 일반적으로 날짜 리터럴이 적절하지 않고 문자열에서 DateTime 또는 날짜로 변환 할 수 없을 때 발생합니다. 이 오류는 여러 가지 이유로 인해 발생하며 솔루션 세트와 함께 자세히 설명합니다.

예 1 :

영국 날짜 및 시간 표기법은 서식 스타일 103과 함께 SQL Server 내장 기능 "변환"기능을 사용하여 달성 할 수있는 일-월-년 형식 (2015 년 1 월 10 일 또는 2015 년 10 월 1 일)을 사용하여 날짜를 표시합니다.

아래 예에서 제공된 날짜 문자열이 잘못된 형식임을 알 수 있습니다. 첫째, 월, 일, 작년에 잘못되어 SQL Server에서 해석 할 수없는 오류를 제공합니다. "103"날짜 스타일을 사용하는 영국 스타일 날짜 변환의 올바른 형식은 "dd / mm / yyyy"입니다.

잘못된 형식:

@date_time_value 선언 varchar (100) = '10 / 16 / 2015 21:02:04 'select CONVERT (datetime2, @date_time_value, 103) as UK_Date_Time_Style

올바른 형식 :

영국 및 프랑스 날짜 형식은 103 = "dd / mm / yyyy"또는 3 = "dd / mm / yy"입니다. 여기서 103과 3은 날짜 스타일입니다.

@date_time_value 선언 varchar (100) = '10 / 1 / 15 21:02:04 'SELECT CONVERT (datetime2, @date_time_value, 103) as Date_Time_Style
@date_time_value 선언 varchar (100) = '10 / 1 / 15 21:02:04 'SELECT CONVERT (datetime2, @date_time_value, 3) as UK_Date_Time_Style

예 2 :

때때로 SQL 서버에서 문자열을 날짜로 변환하면 오류가 발생합니다. 사용 된 날짜 또는 시간 형식 때문이 아니라 스키마에 허용되지 않는 잘못된 정보를 저장하려고하기 때문입니다.

잘못된 날짜 :

다음 오류의 원인은 2019 년이 윤년이 아니기 때문에 '2 월 29 일'과 같은 날짜가 없기 때문입니다.

@date_time_value 선언 varchar (100) = '2019-02-29 21:02:04'select cast (@date_time_value as datetime2) as date_time_value

정답 :

@date_time_value 선언 varchar (100) = '2019-02-28 21:02:04'select cast (@date_time_value as datetime2) as date_time_value

ISO 8601 날짜 형식 :

날짜 값을 조작하는 데 다양한 형식을 사용할 수 있지만 글로벌 / 국제 대중을 위해 작업 할 때 날짜 / 시간 표시를 선택하는 것은 유용성 문제가 될 수 있습니다. 따라서 문화 별 날짜 / 시간 리터럴은 피해야합니다. 이 날짜를 '2018 년 3 월 8 일'로 간주하면 세계 여러 지역에서 다음과 같이 해석됩니다.

  • 영국 스타일에서는 "2018 년 3 월 8 일"로 해석됩니다.
  • 유럽 ​​스타일에서는 "2018 년 8 월 3 일"로 해석됩니다.

다행히 ISO에서 개발 한 국제 날짜 형식에는 하나의 대안이 있습니다. 글로벌 표준 ISO 8601 형식 "YYYY-MM-DDThh : mm : ss"는 문자열 리터럴에 대한보다 언어 독립적 인 옵션이며 이러한 모든 문제를 해결합니다. 반면, "yyyy"는 연도, "mm"은 월, "dd"는 일입니다. 따라서 국제 ISO 형식의 "2018 년 3 월 8 일"날짜는 "2018-03-08"로 작성됩니다. 따라서 ISO 형식은 날짜 표현에 가장 적합한 선택입니다.

@date_time_value 선언 varchar (100) = '2019-03-28 21:02:04'select convert (datetime2, @ date_time_value, 126) as [yyyy-mm-ddThh : mi : ss.mmm]

권장 사항 :

이 기사가 날짜 / 시간 값에 대해 커뮤니티에서 자주 보았던 혼란을 덜어주는 데 도움이되기를 바랍니다. 그러나 날짜를 텍스트 유형 (varchar, char, nvarchar, nchar 또는 text)으로 저장하지 않는 것이 좋습니다. 항상 DATE, DATETIME 및 가급적이면 DATETIME2 (더 많은 정밀도 제공) 유형 열에 날짜 값을 저장하고 날짜 정보 형식은 그대로 둡니다. 데이터베이스에서 검색되는 대신 사용자 인터페이스 계층으로 이동합니다.