'10 Kb ', '50 MB', '1 GB'와 같은 diff 단위로 파일 크기가있는 'size'열이있는 테이블이 있습니다. 문제는 정렬하려고 할 때 처음에는 1GB 행을 반환합니다.바이트 단위로 데이터가있는 mysql coloumn을 정렬하는 방법 KB MB GB?
이전 데이터를 변경하지 않고이 문제를 해결하는 방법 ???
도움이 많이 되서 고맙습니다 ... 감사.
'10 Kb ', '50 MB', '1 GB'와 같은 diff 단위로 파일 크기가있는 'size'열이있는 테이블이 있습니다. 문제는 정렬하려고 할 때 처음에는 1GB 행을 반환합니다.바이트 단위로 데이터가있는 mysql coloumn을 정렬하는 방법 KB MB GB?
이전 데이터를 변경하지 않고이 문제를 해결하는 방법 ???
도움이 많이 되서 고맙습니다 ... 감사.
모든 데이터를 공통 단위 (바이트)로 변환하거나 "측정 단위"가 포함 된 열을 추가하고 크기 열 자체를 숫자로 유지해야합니다.
는 점에서 데이터를 다음과 같은 작업을해야하는 것은 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 |
+-------+------------+
차라리 때 사람이 읽을 수있는 것처럼 바이트 크기 만 형식으로 저장 한 것
+1 정말 좋은 접근 방식입니다. 아마도 각 삽입 및 업데이트 SQL은 응용 프로그램 코드를 변경하지 않고'bytes' 열을 자동 채우기해야합니다. – Nishant
@Nishant, hehe ... 내가 첫 번째 문장을 의미했으면 좋겠습니까? 그렇지 않으면 upvote를 원하지 않습니다. 그 순서는 다음과 같습니다. # ¤ % & :) – Ronnis
예. 나는 새로운 칼럼을 의미했다. 이전 단위를 변환하고 각 업데이트와 삽입으로 처리 할 수 있다면 앱 코드를 건드리지 않고도 좋은 패치입니다. 물론 +1 할 만하다. :) – Nishant
크기가 실제 값을 포함하고 더 높은 곳에서 볼 수 있습니다 (보기에서).
또는 사람이 읽을 수있는 값을 취하고 실제 정수를 반환 한 다음 foo (크기)를 반환하는 함수를 작성하거나 추악하게 만들 수 있습니다. 나는 못생긴다고 언급 했는가?
편집 :
이이 SORT BY REPLACE ((크기, 'GB', '000 MB'), 'MB', '000 킬로바이트 (REPLACE REPLACE : 당신은 이전 데이터를 유지하려는 때문에, 여기에 또 다른 추한 솔루션입니다 '),'GB ','000 ')
(내가 타고있어)
Disclamer : 당신은 정말 청결을 유지하는 유일한 방법, 데이터를 변경해야한다.
출력. – marcog
장기적인 해결책은 이러한 가치를 변화시켜야합니다. 한 필드는 단 하나의 측정 값 (예 : Kb)을 저장하고 필요한 경우 Gb 등으로 변환해야합니다. 그렇지 않으면 데이터 데이터로 작업하는 것이 항상 지저분 할 것입니다. – AJJ
모든 데이터를 바이트로 변경하고 모든 응용 프로그램에 동일한 접근 방식을 사용했습니다. – Sunny