2011-01-05 4 views
2

'10 Kb ', '50 MB', '1 GB'와 같은 diff 단위로 파일 크기가있는 'size'열이있는 테이블이 있습니다. 문제는 정렬하려고 할 때 처음에는 1GB 행을 반환합니다.바이트 단위로 데이터가있는 mysql coloumn을 정렬하는 방법 KB MB GB?

이전 데이터를 변경하지 않고이 문제를 해결하는 방법 ???

도움이 많이 되서 고맙습니다 ... 감사.

+1

출력. – marcog

+1

장기적인 해결책은 이러한 가치를 변화시켜야합니다. 한 필드는 단 하나의 측정 값 (예 : Kb)을 저장하고 필요한 경우 Gb 등으로 변환해야합니다. 그렇지 않으면 데이터 데이터로 작업하는 것이 항상 지저분 할 것입니다. – AJJ

+0

모든 데이터를 바이트로 변경하고 모든 응용 프로그램에 동일한 접근 방식을 사용했습니다. – Sunny

답변

2

모든 데이터를 공통 단위 (바이트)로 변환하거나 "측정 단위"가 포함 된 열을 추가하고 크기 열 자체를 숫자로 유지해야합니다.

는 점에서 데이터를 다음과 같은 작업을해야하는 것은 GB/MB/KB 또는 B 중 하나와 함께 종료했다 가졌

select size 
    from t 
order 
    by case when size like '%GB' then power(1024, 3) * substr(size, 1, length(size) - 2) 
      when size like '%MB' then power(1024, 2) * substr(size, 1, length(size) - 2) 
      when size like '%KB' then power(1024, 1) * substr(size, 1, length(size) - 2) 
      when size like '%B' then     substr(size, 1, length(size) - 1) 
     end desc; 


+-------+------------+ 
| size | bytes  | 
+-------+------------+ 
| 1GB | 1073741824 | 
| 10MB | 10485760 | 
| 100KB | 102400  | 
| 1000B | 1000  | 
+-------+------------+ 
차라리 때 사람이 읽을 수있는 것처럼 바이트 크기 만 형식으로 저장 한 것
+0

+1 정말 좋은 접근 방식입니다. 아마도 각 삽입 및 업데이트 SQL은 응용 프로그램 코드를 변경하지 않고'bytes' 열을 자동 채우기해야합니다. – Nishant

+0

@Nishant, hehe ... 내가 첫 번째 문장을 의미했으면 좋겠습니까? 그렇지 않으면 upvote를 원하지 않습니다. 그 순서는 다음과 같습니다. # ¤ % & :) – Ronnis

+0

예. 나는 새로운 칼럼을 의미했다. 이전 단위를 변환하고 각 업데이트와 삽입으로 처리 할 수 ​​있다면 앱 코드를 건드리지 않고도 좋은 패치입니다. 물론 +1 할 만하다. :) – Nishant

1

크기가 실제 값을 포함하고 더 높은 곳에서 볼 수 있습니다 (보기에서).

또는 사람이 읽을 수있는 값을 취하고 실제 정수를 반환 한 다음 foo (크기)를 반환하는 함수를 작성하거나 추악하게 만들 수 있습니다. 나는 못생긴다고 언급 했는가?

편집 :

이 SORT BY REPLACE ((크기, 'GB', '000 MB'), 'MB', '000 킬로바이트 (REPLACE REPLACE : 당신은 이전 데이터를 유지하려는 때문에, 여기에 또 다른 추한 솔루션입니다 '),'GB ','000 ')

(내가 타고있어)

Disclamer : 당신은 정말 청결을 유지하는 유일한 방법, 데이터를 변경해야한다.

+0

+!, @Sunny 정말로 바이트 단위로 데이터를 저장하고 싶다면 다른 곳에서는 쉽게 포맷 할 수 있습니다. –

+0

전에 실수를했습니다. diff에 데이터를 저장했습니다. 형식. 100+ 수천 개의 행을 바꿀 것을 제안합니까? – Sunny

+1

간단한 변화입니다. 간단한 스크립트를 작성하고 작지만 대표적인 데이터 세트를 철저히 테스트하여 밤에 계속 작동되게하십시오. – Mrki

관련 문제