CAST DECIMAL을 INT로


81

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

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


캐스팅 경고는 문자열을 제공하기 때문입니다. 확인할 수 있습니까?
ajreal

도 또한 마리아 DB와의 작업
Niyati

답변:


127

다음 과 같이 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 ... 

2
SQL 코드에서 서식을 다루지 않아야한다는 것을 알고 있습니까?
fredley

수고하셨습니다. +1. 형식 내 상황이 잘 작동하지만, 사람이 CAST와 함께 할 수 있다면 난 아직도 궁금하네요
Drahcir

@TomMedley : 예, PHP를 사용하고 있었다면 그렇지 않을 것입니다. 그러나 이것은 단지 일부 트리거와 함수를위한 것입니다
Drahcir 2011

2
@TomMedley 나는 더 미묘한 차이가 있습니다. SQL 쿼리의 서식은 뷰를 만들 때 유용합니다.
VH-NZZ

1
이렇게하면 숫자에 천 단위 구분 기호로 쉼표가 추가됩니다.
Jan Špaček

22

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

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의 동작에 유의하십시오.


21

링크 한 기사에서 :

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

바이너리 [(N)]

CHAR [(N)]

데이트

날짜 시간

소수 [(M [, D])]

서명 됨 [정수]

시각

부호 없음 [정수]

SIGNED대신 시도INT


오류 코드 1292, SQL 상태 22001 : 데이터 절단 : 잘린다 잘못된 INTEGER 값 : 감사하지만 나는 다른 지금 오류 '558.00'
Drahcir


10

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


10

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 값에는 소수점이나 소수 부분이 포함되지 않습니다.


3

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


3

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

SELECT columnName1, CAST(columnName2 AS  SIGNED ) FROM tableName 

1

시험 cast (columnName as unsigned)

unsigned는 양수 값입니다.

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


1

1 센트 : 공백 없음 b / w CAST 및 (표현식). ie, CAST (columnName AS SIGNED).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.