2011-12-16 4 views
1

역사적인 이유 때문에 문자열이 있지만이 날짜에 새로운 값이 입력되는이 열이 talbe에 있습니다.varchar 열의 Mysql 숫자 쿼리 문제

나는 숫자의 간격에서 가장 큰 값을 찾아야하지만 op_calcul 그것이했을 수 사소한 SQL했을 경우 값은 DB :(

에서 문자열은 다음과 같습니다

Select MAX(op_calcul) FROM nom_prod where op_calcul >=500 and op_calcul < 5000 

하지만 그들을있는 것은. 몇 가지 문제에

시도 다른 시나리오 나를 넣어 VARCHAR 아직 해결책을 제공하지 않았다.

어떤 힌트를?

감사

답변

1
SELECT MAX(CAST(op_calcul as SIGNED)) FROM nom_prod... 

트릭을 할해야합니다. WHERE 절을 캐스팅해야 할 수도 있습니다.

MAX와 WHERE 모두에서 성능상의 이유로 인해 정수 열을 사용해야합니다. 비 숫자이거나 범위 밖의 데이터가 있습니까? 열 유형을 변경하지 않으면 매우 쉽습니다.

+0

인상적 !!! 10 분 안에 해결책으로 투표하십시오. 감사합니다 – Cris

+0

열에는 "코드 12ac"등 – Cris

+1

아 ...와 같은 varchar로 역사적인 데이터를 가지고 그 경우에는 그 행을 올바르게 캐스팅되지 않을 수도 있습니다 알아? 제대로 형성된 정수가 아닌 것은 아마도 0으로 캐스트 될 것입니다. 편집 : 편집이 정말로 필요 했습니까? 불필요한 것 같습니다. – Corbin

1
SELECT MAX(CAST(`op_calcul` AS SIGNED)) 
FROM `nom_prod` 
WHERE `op_calcul` >= 500 
AND `op_calcul` < 5000; 
+1

예약어가 엔티티 이름으로 사용되지 않는 한 일반적으로 사용하지 않아야합니다 (수행하지 않아야 함). 그들은 SQL 이식성을 없애고 (실제로는 거의 존재하지 않지만) 이점을 제공하지 않습니다. – Corbin