2012-04-11 4 views
0

테이블에 start_date_time INT UNSIGNED 열이 있습니다.MySQL에서 INT 값이 음수 인 경우 계산 됨

나는이

... WHERE (g.start_date_time-$currentTime) > 0 ORDER BY (g.start_date_time-$currentTime) 

같은 쿼리를하고 난 오류 Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in...를 얻을. 만약 내가 그것을 으로 설정했다면 물론 모든 것이 작동하지만 내 질문은 그것을 유지하는 방법이있다. UNSIGNED 어쨌든 (나는 계산이 필요하고 어디에도 저장할 필요가 없다), 또는 나는 음의 값을 계산한다. 내 검색어를 재정의해야합니까?

답변

1

난 당신이 g.start_date_time 컬럼에 인덱스를 사용하여 수

WHERE g.start_date_time > $currentTime ORDER BY g.start_date_time 

이 다음과 같이 재정의해야한다고 생각하면 (g.start_date_time- $ currentTime을)

으로 주문하지 않아도
1

부호가있는 정수로 변환하기 위해 CAST() 또는 CONVERT()을 사용할 수 있습니다. 그러나 거기에 부호있는 정수보다 큰 값이 있으면 바람직하지 않은 결과가 발생합니다. 어쨌든 타임 스탬프에 정수를 사용하면 안됩니다. 시간 소인 또는 날짜 시간 필드를 사용하십시오.