Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

CAST 연산자를 사용하여 VARCHAR 열을 FLOAT로 정렬하면 MySQL에서 작동하지 않습니까?

<시간/>

캐스트가 작동하지 않으면 ORDER BY 절과 함께 yourColumnName*1을 사용할 수 있습니다.

yourColumnName*1을 사용합니다. 구문은 다음과 같습니다.

SELECT yourColumnName1,yourColumnName2,...N FROM yourTableName ORDER BY yourColumnName*1 DESC;

CAST() 연산자를 사용할 수도 있습니다. 구문은 다음과 같습니다.

SELECT yourColumnName1,yourColumnName2,...N FROM yourTableName ORDER BY CAST(yourColumnName as DECIMAL(8,2)) DESC;

위의 구문을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> 테이블 생성 VarcharColumnAsFloatDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Amount varchar(20), -> PRIMARY KEY(Id) -> );쿼리 OK, 영향을 받는 행 0개(1.01초) 

삽입 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오. 쿼리는 다음과 같습니다.

mysql> insert into VarcharColumnAsFloatDemo(Amount) values('3446.23');Query OK, 1행 영향(0.10초)mysql> insert into VarcharColumnAsFloatDemo(Amount) values('2464.46');Query OK, 1행 영향( 0.16초)mysql> insert into VarcharColumnAsFloatDemo(Amount) values('6465.78');Query OK, 1행 영향(0.13초)mysql> insert into VarcharColumnAsFloatDemo(Amount) values('6464.98');Query OK, 1행 영향( 0.44초)mysql> insert into VarcharColumnAsFloatDemo(Amount) values('645.90');Query OK, 1개의 row가 영향을 받았습니다(0.19초)mysql> insert into VarcharColumnAsFloatDemo(Amount) values('6465.99');Query OK, 1개의 row가 영향을 받았습니다( 0.23초)mysql> VarcharColumnAsFloatDemo(Amount) values('3745.76')에 삽입, 쿼리 확인, 1행 영향(0.14초)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.

mysql> 선택 *from VarcharColumnAsFloatDemo;

다음은 출력입니다.

+----+---------+| 아이디 | 금액 |+----+---------+| 1 | 3446.23 || 2 | 2464.46 || 3 | 6465.78 || 4 | 6464.98 || 5 | 645.90 || 6 | 6465.99 || 7 | 3745.76 |+----+---------+7행 세트(0.00초)

다음은 캐스트 연산자를 사용하여 varchar를 float로 정렬하는 쿼리입니다.

mysql> Id,Amount from VarcharColumnAsFloatDemo order by cast(Amount as DECIMAL(8,2)) DESC;

다음은 출력입니다.

+----+---------+| 아이디 | 금액 |+----+---------+| 6 | 6465.99 || 3 | 6465.78 || 4 | 6464.98 || 7 | 3745.76 || 1 | 3446.23 || 2 | 2464.46 || 5 | 645.90 |+----+---------+7행 세트(0.00초)

두 번째 접근 방식은 yourColumnName*1을 사용하는 다음과 같습니다.

mysql> Id,Amount from VarcharColumnAsFloatDemo order by Amount*1 desc;

다음은 출력입니다.

+----+---------+| 아이디 | 금액 |+----+---------+| 6 | 6465.99 || 3 | 6465.78 || 4 | 6464.98 || 7 | 3745.76 || 1 | 3446.23 || 2 | 2464.46 || 5 | 645.90 |+----+---------+7행 세트(0.00초)