2014-05-16 6 views
0

는이 코드가 있습니다변환 오류

DECLARE @StartDate nvarchar 
SET @StartDate='22/10/2014' 
SELECT CAST (@StartDate as datetime) 

을 그리고 그것은 나에게 오류를 제공합니다

Conversion failed when converting date and/or time from character string.

사람이 더 좋은 방법을 제안 할 수 있습니다/적어도 이렇게하는 오류는 없습니다.

답변

2

이 사용할 수 dd/mm/yyyy 형식으로 날짜를 나타내는 문자열로 변환하려면 :

DECLARE @StartDate nvarchar(10) 
SET @StartDate='22/10/2014'  
SELECT CONVERT(datetime, @StartDate, 103) 

varchar 선언

1로 길이를 설정하는 의미를

+0

이제 오류가 발생합니다. nvarchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 발생합니다. –

+0

@ ch.smrutiranjanparida 수정 된 게시물보기 –

+0

하지만 내 경우에는 @Hamlet Hakobyan이 '22/10/2014 '데이터베이스에서옵니다. 내 말은이 값이 저장되는 곳의 값입니다. 어쨌든 '22/10/2014 '에서'20141022 '로 변환 할 수 있습니까? 그러면 효과가 있습니다. –

5

SQL Server가 지원하는 다양한 형식이있다 - 참조 MSDN Books Online on CAST and CONVERT. 대부분의 해당 형식은 이며 어떤 설정을 사용하고 있습니까?입니다. 따라서 이러한 설정은 때때로 작동 할 수 있습니다.

이 문제를 해결하는 방법은 SQL Server가 지원됩니다 (약간 적응) ISO-8601 날짜 형식을 사용하는 것입니다 -이 형식은 항상작동 -에 관계없이 SQL 서버 언어와 DATEFORMAT 설정.

ISO-8601 format는 SQL 서버에서 지원하는 두 가지 맛으로 제공 :

  • YYYYMMDD 단지 날짜 (아무 시간 부분)에 대한; 여기에 참고하십시오 : 대시 없음!, 이것이 매우 중요합니다! YYYY-MM-DD이 아니며은 SQL Server의 dateformat 설정과 독립적이며 이 아닌 경우이 모든 상황에서 작동합니다!

나 : 날짜와 시간에 대한

  • YYYY-MM-DDTHH:MM:SS - 여기서주의 :이 형식 대시있다 (하지만이 생략 할 수 있습니다) 날짜와 시간 사이의 구분 기호로 고정 TDATETIME의 일부입니다.

이 내용은 SQL Server 2000 이상 버전에서 유효합니다. (!에만 DATE - 하지DATETIME)는 SQL Server 2008 또는 최신와 DATE 데이터 유형을 사용하는 경우

, 다음 SQL 서버의 모든 설정을, 너무, 당신은 참으로 또한 YYYY-MM-DD 형식을 사용할 수 있습니다 그것은 작동합니다 .

왜이 전체 주제가 너무 까다 롭고 다소 혼란 스러울 지 물어 보지 마십시오. 그것이 바로 그런 방식입니다. 그러나 YYYYMMDD 형식을 사용하면 SQL Server의 모든 버전과 SQL Server의 언어 및 날짜 형식 설정에 문제가 없어야합니다.

SQL Server 2008 이상 권장 사항은 날짜 부분 만 필요한 경우 DATE을 사용하고 날짜와 시간이 모두 필요한 경우 DATETIME2(n)을 사용하는 것이 좋습니다.가능성이있는 경우 DATETIME 데이터 형식을 단계적으로 시작하려고 시도해야합니다.