itsource

INT에 십진법 주조

mycopycode 2022. 9. 28. 00:09
반응형

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진수를 int로 변환하려고 하는데, 실제 값은 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 ... 

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

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

DIV 1을 사용하면 FORMAT 등의 문자열 기반 기능은 말할 것도 없고 FLOOR보다 속도크게 향상됩니다.

MySQL 정수 분할 막대 차트 속도 (Roland Bouman의 블로그에서 가져온 그래프)

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

링크한 기사:

type은 다음 값 중 하나입니다.

이진수[(N)]

문자[(N)]

날짜.

날짜

십진수[(M[,D])]

서명 완료 [INTEGER]

시간을

서명 없음 [INTEGER]

해라SIGNED대신INT

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

CAST(columnName AS SIGNED)

그러나 이것은 MySQL에 특화된(표준화되지 않은) 것처럼 보이므로 다른 데이터베이스에서는 작동하지 않을 수 있습니다.적어도문서(제2차 비공식 검토 초안) ISO/IEC 9075:1992, 데이터베이스는 "SIGNARED"/를 나열하지 않는다.서명되지 않음" 섹션의4.4 Numbers.

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

CAST(columnName AS DECIMAL(0))

MySQL 문서에 따르면:

스케일이 0인 경우 DECIMAL 값에는 소수점이나 소수점이 포함되지 않습니다.

이것을 사용하다

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

여기 링크가 있습니다.

floor()와 DIV 1 사이에는 중요한 차이가 있습니다.음수의 경우, 그들은 다르게 행동합니다.DIV 1은 서명된 대로 정수 부분을 반환하고 floor(x)는 "x보다 크지 않은 가장 큰 정수 값"을 반환합니다(매뉴얼 참조).따라서 : floor(-1.1)를 선택하면 -2가 되고 -1.1 div 1을 선택하면 -1이 됩니다.

다음을 시도해 보십시오.

SELECT columnName1, CAST(columnName2 AS  SIGNED ) FROM tableName 

숫자가 반드시 .00으로 끝나지 않으면 ROUND()도 있습니다.ROUND(20.6)는 21, ROUND(20.4)는 20이 됩니다.

★★를 해 보세요.cast (columnName as unsigned)

부호 없음은 양수 값만 해당됩니다.

값을 하려면 , 「」를 해 주세요.cast (columnName as signed) ,
포함음수 포함)의 부호 는 두 음수는 )의 차이

1 cent: 공백이 없는 CAST 및 (식). 즉, CAST(columnName AS SIGNED)입니다.

언급URL : https://stackoverflow.com/questions/8537037/cast-decimal-to-int

반응형