2012-09-26 4 views
1

SQL Server Compact Edition에서 WebMatrix를 사용하고 있으며 간단한 질문이 있습니다. 쿼리가 특별히처럼 보이는 화면에 출력을하려함으로써캐스팅 후 날짜를 비교할 때 내 SQL 쿼리가 모든 행을 선택하는 이유는 무엇입니까?

if(cndDateLastModified=="gteq"){stringCompiler+="'CAST(DateLastModified AS datetime)' >= 'CAST(" + DateLastModified + " AS datetime)' ";}//// 

: 나는 코드의 라인을 가지고

몇 가지 이유를 들어
SELECT * FROM POITable WHERE 'CAST(DateLastModified AS datetime)' >= 'CAST(09/25/2012 AS datetime)' 

, 그것은에, 전에 모든 행을 반환하고, 날짜 이후에 지정된. 나는 질의에 관해서는 여전히 약간 녹색이지만, 조사 된 모든 계정에 의해 이것은 효과가있다. 분명히 그것은 제가 기대하지 않는 것을하고 있습니다. 그것은 이해할 만하다고 생각합니다.

내가 원하는 방식대로 작동하도록하는 방법에 대한 아이디어가 있습니까? 여전히 문자열이나 다른 형식을 비교하려고합니까?

참고 : 두 변환에 대해 CONVERT (datetime, DateLastModified) 및 CONVERT (datetime, DateLastModified, 1)을 사용하여이 작업을 시도했습니다.

다른 참고 사항 : 데이터베이스에 문자열로 저장됩니다.

또 다른 참고 사항 : 조건 (> =에서 < =)으로 전환하면 첫 번째 예상치 못한 결과 집합을 고려할 것으로 예상되는 행이 반환되지만 그 이유는 여전히 알 수 없습니다.

아이디어가 있으십니까?

+0

을 제공

를 변경이

stringCompiler+="CAST(DateLastModified AS datetime) >= CAST('" + DateLastModified + "' AS datetime) " 

주처럼해야 어제까지 수정 된 모든 데이터를 요구합니다 (이 게시 시점의 9 월 26 일). 제외되어야하는 현재 또는 미래 또는 미래로부터 수정 된 데이터가 있습니까? – StarPilot

+0

죄송합니다. 테스트를 위해 변경 한 후 라인을 복사했습니다. 나는> = <=, 를 포함하는 적절한 행을 반영하기 위해 내 게시물을 편집했습니다. – VoidKing

+0

> =, 사용하는 방법은 무엇입니까? – VoidKing

답변

3

작은 따옴표로 두 개의 문자열을 비교하기 때문에. 'CAST (....)'대 'CAST (...)'. 당신은 'Ginger'> = 'Fred'와 같은 결과를 얻는 WHERE 'Ginger'를 작성할 수도 있습니다. : D

당신이 필요로해야하는 것은 : POITable FROM WHERE CAST (DateLastModified와 날짜 AS)> = (날짜 시간 AS '09/2,012분의 25 ') CAST 리터럴 날짜 주위

를 사용하여 작은 따옴표./2천12분의 25 '09 '는 SQL 서버를 사용하는 경우

, 당신은 단지 WHERE CAST (날짜 시간 AS DateLastModified와)를 사용할 수 있습니다> ='

또한 2012년 9월 25일 '경우 DateLastModified와 열 표가 이미 날짜 시간 인 경우 캐스트를 제거하십시오. 캐스트는 문자열을 데이터 유형으로 변환하기위한 것입니다. 내 직감은 당신이 필요로하는 모든입니다 :

WHERE DateLastModified >= '2012-09-25' /* ISO date strings are understood and accepted by SQL Server. */ 
or 
WHERE DateLastModified >= GETDATE() /*Everything in the future, time inclusive.*/ 
or 
WHERE DateLastModified >= DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) /* Everything starting today. */ 
+0

글쎄, 나는이 줄로 길을 시도했다. (나는 기억하지 않는다. 정적 인 날짜와 비교하지 않는다. HTML 형식의 C# 변수를 사용하고있다.) 코드가 다음과 같이 수정되었습니다 : – VoidKing

+0

if (cndDateLastModified == "gteq") {stringCompiler + = "CAST ('DateLastModified'AS datetime)> CAST ('"+ DateLastModified + "'AS datetime); // – VoidKing

+0

이 오류가 발생합니다 : '/'응용 프로그램의 서버 오류입니다. 날짜 형식에 구문 오류가 있습니다. [Expression = DateLastModified] 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오. 예외 정보 : System.Data.SqlServerCe.SqlCeException : 날짜 형식에 구문 오류가 있습니다. [Expression = DateLastModified] – VoidKing

1

은 작은 따옴표의 위치는 당신에게 당신이

CAST(DateLastModified AS datetime) >= CAST('09/25/2012' AS datetime) 
+0

나는 2 개의 답을 수락 할 수 있으면 좋겠다. 너는 똑같아. – VoidKing

관련 문제