2013-03-10 6 views
-1

NVARCHAR 열이 Receivingdate입니다. 나는 현재 시간과 내용을 비교하려면,하지만 난 WHERE (Receivingdate < Getdate())를 호출 할 때, 나는 다음과 같은 오류 얻을 : 나는 '날짜 비교 중 오류가 발생했습니다.

DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy"); 

:

The conversion of nvarchar to datetime resulted in an out of range value

내가 삽입을 C 번호에서 다음 호출을 사용하여 데이터 내가 뭘 잘못하고 있는지 궁금해.

+3

'Receivingdate'열의 데이터 유형은 무엇입니까? –

+0

이것은 nvarchar 데이터 유형 –

+6

입니다. 간단히 말해서 : 적절한 날짜/시간 데이터 유형 NOT varchar/nvarchar를 사용하십시오. –

답변

0

오류는 문자열을 날짜와 비교하려고합니다. 날짜는 숫자입니다. 형식을 걱정할 필요가있는 유일한 시간은 표시 할 때뿐입니다.

지금까지 보여준 것,

DateTime.Today; 

DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy"); 

에서 C# 코드를 변경하고 확인을해야 들어.

+0

이것은 작동 할 수 있습니다. 이외에도 날짜를 nvarchar에 입력하는 것은 나쁜 습관입니다. 이와 같은 예기치 않은 문제가 발생할 수 있습니다. 나쁜 코드를 작성할 수 있습니다. –

+1

여전히 문자열을 부적절한 열 유형으로 삽입합니다. 이제는 '09/03/2013'과'Mar 9 2013 '이 혼합되어있을 것입니다.질문의 오류는 실제로 열에 이미 생성 된 다른 쓰레기 때문에 발생합니다. 우리는 (a) 테이블에 가비지 데이터를 남기고 (b) 열을 문자열로 사용합니다. –

3

잘못된 것은 잘못된 날짜를 NVARCHAR 열에 저장하는 것입니다. 그렇게하지 마세요. 테이블을 수정하고 DATE 데이터 형식을 사용하여 해당 열을 만듭니다. 오류는 테이블에 가비지 데이터가 들어 오기 때문에 발생합니다. 사용하여 해당 행을 찾기 :

SELECT Receivingdate FROM dbo.YourTable 
    WHERE ISDATE(ReceivingDate) = 0; 

을 지금, 당신은에 중 올바른 또는 데이터 유형을 수정하기 전에 해당 제거해야합니다. 그 다음 :

ALTER TABLE dbo.YourTable 
    ALTER COLUMN ReceivingDate DATE; 

다음에는 삽입 할 때 지역 문자열 형식으로 변환하지 마십시오. .ToString()을 호출하지 않고 C#의 DateTime 값을 삽입하십시오. 이 프로세스를 통해 문자열로 변환하고 다시 표시해야하는 이유는 없습니다. 단, 표시하려는 시점을 제외하고는

+0

괜찮지 만 "dd/MM/yyyy"형식의 sql 열에 날짜를 표시하고 해당 쿼리를 사용하려고합니다. –

+0

@SaimaMaheen, 여전히 데이터를 'DateTime'형식으로 쿼리 할 수 ​​있습니다. 그리고 당신은 "dd/MM/yyyy"로 C# 대신 SQL select에서 컬럼을 포맷해야만하는 특별한 이유가 있을까요? – gunr2171

+0

@Saima 왜 저장되어있는 형식에 관심이 있습니까? SQL Server가이를 염려하게 만듭니다. 날짜로 저장하고 값을 표시 할 때 서식 지정에 대해 걱정하십시오. –

관련 문제