VARCHAR에서 INT로 캐스트-MySQL


267

내 현재 데이터

SELECT PROD_CODE FROM `PRODUCT`

이다

PROD_CODE
2
5
7
8
22
10
9
11

나는 네 가지 쿼리를 모두 시도했지만 아무것도 작동하지 않습니다. ( 참고 )

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT;

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT;

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT;

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT;

아래와 같은 구문 오류가 모두 발생합니다.

SQL 구문에 오류가 있습니다. 1 행에서 ') AS INT FROM PRODUCT LIMIT 0, 30'근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.

SQL 구문에 오류가 있습니다. 1 행의 PRODUCT LIMIT 0, 30 '에서'INTEGER) FROM PRODUCT LIMIT 0, 30 '근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.

MySQL에서 varchar를 정수로 캐스트하는 올바른 구문은 무엇입니까?

MySQL 버전 : 5.5.16


각 시도마다 어떤 오류가보고됩니까? 입력은 무엇입니까? 있어 가정 캐스트가 결과 집합의 모든 레코드에 실패 할 경우 쿼리를 실패합니다. 적어도 SQL 표준은 MySql이 표준의 안전 규칙을 위반 한 것으로 유명하지만 SQL 표준이 말한 것입니다. 그리고 기록을 위해 두 번째와 네 번째로 나열된 샘플이 정확합니다.
Joel Coehoorn 1

답변:


552

캐스트 함수 및 연산자에 설명 된대로 :

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

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

따라서 다음을 사용해야합니다.

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
서명되지 않았습니다. MySQL은 언제부터 Integer 데이터 유형을 서명되지 않은 것으로 변경 했습니까?
레닌 Raj Rajasekaran

20
@emaillenin : 데이터를 해석하는 방법에 대한 추가 정보 (예 : 정수의 서명 여부)가 필요하므로 캐스트의 데이터 유형은 열의 데이터 유형과 다릅니다.
eggyal

13
이 정보에 감사드립니다. MySQL 문서는 혼란 스럽기 때문에 많은 도움이되었습니다.
Racky

나는 나중에 내가 10,2 (DECIMAL로 변경 .. DOUBLE (10,2) AS CAST (num_col에 문제가되었다) 그리고 일 Tnanks.
나바 Bogatee

MariaDB에서는 제대로 CAST(PROD_CODE AS INT) 작동 합니다.
Paul Spiegel

56

varchar 필드 / 값을 숫자 형식으로 캐스팅하는 데 약간의 해킹이 사용될 수 있습니다.

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT`

9
간단하고 문서화되고 지원되며 권장되는 솔루션이있을 때 왜 이러한 "해킹"을 사용합니까?
eggyal

31
@eggyal TL; DR : 당신이 언급하고있는 "핵"은 간단하고 문서화되고 권장되는 솔루션입니다. - - - - - - - - - - - - - - - - - - - - - - - - - 긴 버전 :에서 수동 : To cast a string to a number, you normally need do nothing other than use the string value in numeric context내가 사용하는 거라고하지만 +0대신에 *1또한 빨리 때문이다.
Mindwin

8
@BrianStinar의 대답은 더 나은 의미를 가진 솔루션이 존재한다는 것을 분명히 보여 주지만 때로는 문자열과 숫자 유형을 결합 할 때 기본 값이 다른 기본 요소로 암시 적으로 캐스팅되는 것이 편리합니다. 따라서이 기능의 존재를 위해 무작위로 프로그래밍 언어를 배싱하는 것은 다소 부적절한 것 같습니다.
B12Toaster

이러한 유형의 핵을 사용하지 마십시오! - 코드를 되돌리려이 가득 어려운 때 다시 훨씬 나중에 물린 것 아주 나쁜 연습
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.