ProgramingTip

CAST DECIMAL을 INT로

bestdevel 2020. 11. 16. 21:58
반응형

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 ... 

링크 한 기사에서 :

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

바이너리 [(N)]

문자 [(N)]

데이트

날짜 시간

소수 [(M [, D])]

서명 됨 [정수]

시각

부호 없음 [정수]

SIGNED대신 시도INT


이 목적을 위해 에서 더 최적화 된 방법 * :

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

사용 DIV 1

엄청난 속도 향상 을 통해 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의 동작에 유의하십시오.


이것을 사용하십시오

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을 제공합니다.


당신은 시도 할 수 있습니다 :

SELECT columnName1, CAST(columnName2 AS  SIGNED ) FROM tableName 

시험 cast (columnName as unsigned)

unsigned는 양수 값입니다.

당신이 다음 음의 값을 포함 할 경우 cast (columnName as signed),
기호 (음성 포함)과 부호의 차이 (부호의 두 배 크기지만, 음이 아닌)를


1 센트 : 공백 b / w CAST 및 (표현식) 없음. 즉, CAST (서명 된 열 이름).

참고 URL : https://stackoverflow.com/questions/8537037/cast-decimal-to-int

반응형