[mysql] CAST DECIMAL을 INT로

나는 이것을 시도하고있다 :

SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...

여기에서 도움말 FAQ를 살펴 보았습니다 : http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html , 그렇게 할 수 있다고 말하지만 CAST(val AS TYPE)작동하지 않습니다.

10 진수를 정수로 변환하려고하면 실제 값은 223.00이고 223을 원합니다.



답변

다음 과 같이 FLOOR 함수를 시도 할 수 있습니다 .

SELECT FLOOR(columnName), moreColumns, etc
FROM myTable
WHERE ...

소수점 이하 자릿수를 생략 할 수 있다는 것을 알고 있다면 FORMAT 함수를 사용해 볼 수도 있습니다 .

SELECT FORMAT(columnName,0), moreColumns, etc
FROM myTable
WHERE ...

두 기능을 결합 할 수 있습니다.

SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc
FROM myTable
WHERE ...


답변

보다 최적화 된 방법 이 목적을 위해*:

SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...

사용 DIV 1 A는 엄청난 속도 향상 을 통해 FLOOR 같은 문자열 기반의 기능은 말할 것도없고, FORMAT을

mysql> SELECT BENCHMARK(10000000,1234567 DIV 7) ;
+-----------------------------------+
| BENCHMARK(10000000,1234567 DIV 7) |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.83 sec)

mysql> SELECT BENCHMARK(10000000,1234567 / 7) ;
+---------------------------------+
| BENCHMARK(10000000,1234567 / 7) |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (7.26 sec)

mysql> SELECT BENCHMARK(10000000,FLOOR(1234567 / 7)) ;
+----------------------------------------+
| BENCHMARK(10000000,FLOOR(1234567 / 7)) |
+----------------------------------------+
|                                      0 |
+----------------------------------------+
1 row in set (8.80 sec)

(*) 참고 : Grbts에서 지적했듯이 부호없는 / 양수 값과 함께 사용할 때 DIV 1의 동작에 유의하십시오.


답변

링크 한 기사에서 :

유형은 다음 값 중 하나 일 수 있습니다.

바이너리 [(N)]

CHAR [(N)]

데이트

날짜 시간

소수 [(M [, D])]

서명 됨 [정수]

시각

부호 없음 [정수]

SIGNED대신 시도INT


답변

이것을 사용하십시오

mysql> SELECT TRUNCATE(223.69, 0);
        > 223

여기 에 링크가 있습니다


답변

floor ()와 DIV 1 사이에는 중요한 차이가 있습니다. 음수의 경우 다르게 작동합니다. DIV 1은 정수 부분 (부호화 된대로 캐스트)을 반환하는 반면, floor (x)는 “x보다 크지 않은 가장 큰 정수 값”(설명서에서)을 반환합니다. 따라서 select floor (-1.1) 는 -2가되고 select -1.1 div 1 은 -1이됩니다.


답변

CAST () 함수는 MySQL에서 “공식”데이터 유형 “INT”를 지원하지 않으며 지원 되는 유형 목록에 없습니다 . MySQL에서는 “SIGNED”(또는 “UNSIGNED”)를 대신 사용할 수 있습니다.

CAST(columnName AS SIGNED)

그러나 이것은 MySQL 전용 (표준화되지 않음)으로 보이므로 다른 데이터베이스에서는 작동하지 않을 수 있습니다. 최소한 이 문서 (Second Informal Review Draft) ISO / IEC 9075 : 1992, 데이터베이스 는 섹션에 “SIGNED”/ “UNSIGNED”를 나열하지 않습니다 4.4 Numbers.

그러나 DECIMAL은 표준화되고 MySQL에서 지원되므로 다음은 MySQL (테스트 됨) 및 기타 데이터베이스에서 작동합니다.

CAST(columnName AS DECIMAL(0))

MySQL 문서 에 따르면 :

스케일이 0이면 DECIMAL 값에는 소수점이나 소수 부분이 포함되지 않습니다.


답변

숫자가 항상 .00으로 끝나지 않는 경우에도 ROUND ()가 있습니다. ROUND (20.6)는 21을, ROUND (20.4)는 20을 제공합니다.