2012-08-23 3 views
0

내가 내 SQL의 DB를 업데이트하려고 날짜 나 SQL 코드XCODE는 - SQL은 날짜가 만료되면

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23 11:19:00 +0000' AS DATE) 

의이 사랑스러운 비트가 (즉 지금보다 작) 그러나 모든 레코드를 갱신 (날짜가있는 경우에도 작지 지금보다) 또한

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) < CAST('2012-08-23 11:19:00 +0000' AS DATE) 

을 시도하지만이 모든 행에 영향을 dosent

.

나는 조금 혼란스러워하는 것이 있습니까 ??

어떤 도움말 ???

감사합니다.

답변

2

:

CAST('2012-08-23 11:19:00 +0000' AS DATE) 

당신이 날짜로 변경 CAST()를 사용하는 경우, 다음의 시간 부분에 통과 할 필요가 없다 값.

전체 테이블 스키마를 제공하지 않았지만 한 가지 고려해야 할 것은 Y/N 값에 bit 필드를 사용하는 것입니다. 여기

작동 코드와 SQL Fiddle이다

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23' AS DATE) 
0

혼란스러운 것은 SQL 형식입니다. 나는 당신이 어떤 데이터베이스를 사용하고 있는지 알지 못하지만, 아마도 boolean (또는 int)과 date 타입을 가지고있을 것이다. 부울과 날짜를 문자열로 저장하는 것은 매우 비효율적입니다. 예를 들어, 예제가 효과가 있었다고해도 전체 데이터베이스를 스캔하여 비교하려면 각 값을 캐스팅해야합니다.

오류의 단서는 <<=입니다. 이것은 값이 동일하다는 것을 암시합니다. 캐스트가 양쪽에서 실패하고 기본값 0을 리턴하면 동등합니다.

올바른 유형을 사용하도록 스키마를 변경하면 쿼리가 작동합니다.

나는이 라인을 제외하고, 코드에 대해 이상한 아무것도 볼 수 없습니다