int를 varchar로 캐스트


119

아래 쿼리가 있으며 캐스트 id해야합니다.varchar

개요

create table t9 (id int, name varchar (55));
insert into t9( id, name)values(2, 'bob');

내가 시도한 것

select CAST(id as VARCHAR(50)) as col1 from t9;

select CONVERT(VARCHAR(50),id) as colI1 from t9;

그러나 그들은 작동하지 않습니다. 제안 해주세요.


4
다음에 표시되는 실제 오류 메시지를 포함해야합니다. 이는 일반적으로 무엇이 잘못되었는지 파악하는 데 많은 도움이됩니다. 이번에는 우리 중 많은 사람들이 여기서 무슨 일이 일어나고 있는지 아는 것이 운이 좋았습니다.
아론

답변:


218

데이터 유형 이 필요 cast하거나 데이터 유형 convert으로서 데이터를 캐스트 / 변환 할 수있는 데이터 유형 CHAR이 없습니다 varchar.

select CAST(id as CHAR(50)) as col1 
from t9;

select CONVERT(id, CHAR(50)) as colI1 
from t9;

SQL Fiddle 에서 실행중인 다음 SQL을 참조하십시오 .

/*! Build Schema */
create table t9 (id INT, name VARCHAR(55));
insert into t9 (id, name) values (2, 'bob');

/*! SQL Queries */
select CAST(id as CHAR(50)) as col1 from t9;
select CONVERT(id, CHAR(50)) as colI1 from t9;

잘못된 데이터 유형으로 변환하려는 사실 외에도 사용하던 구문 convert이 잘못되었습니다. 이 convert함수는 expr열 또는 값이 있는 다음을 사용합니다 .

 CONVERT(expr,type)

또는

 CONVERT(expr USING transcoding_name)

원래 쿼리의 구문이 거꾸로되었습니다.


길이를 제공 할 필요가 없다는 점을 언급 할 가치가있을 수 있습니다. 캐스트와 변환 모두 t9의 col1로 select CAST (id as CHAR) 행을 따라 무언가를 허용합니다.
Jonathan Sayce 2014-06-04

1
그것은 길이를 사용하지 나쁜 관행이 @JonathanSayce, 내가 읽어 보시기 바랍니다 킥에 나쁜 습관 : (길이)없이 VARCHAR를 선언 함으로써 아론 버트 랜드
타린

흥미로운 게시물-@bluefeet 감사합니다-캐스트 / 변환 시나리오에서 임의의 것보다 필요한 크기를 사용했을 것이라고 가정했습니다.
Jonathan Sayce 2014-06-04

@JonathanSayce 저는 MySQL의 내부와 외부에 지나치게 익숙하지 않으며 임의의 것을 사용하지 않을 수도 있지만 MySQL 엔진이 그렇게 똑똑하기 위해 MySQL 엔진에 의존하지는 않습니다 (MySQL에 대한 공격이 없음). 적절한 길이를 얻기 위해 항상 명시 적으로 제공합니다.
Taryn

2
@Pacerier IMO, concat()변환을 위해 사용 하는 것이 반드시 그렇게 직관적 인 것은 아닙니다. 나는 내 코드가 명확하기를 원하며 그다지 의미가 없습니다.
Taryn

35

VARCHAR캐스트 할 유효한 유형이 아니기 때문에 당신은 그것을 얻고 있습니다. MySQL 문서 ( http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast ) 에 따르면 다음으로 만 캐스트 할 수 있습니다.

  • 바이너리 [(N)]
  • CHAR [(N)]
  • 데이트
  • 날짜 시간
  • 소수 [(M [, D])]
  • 서명 됨
  • [정수]
  • 시각
  • 부호 없음 [정수]

가장 좋은 방법은 CHAR.


mysql을 사용하기 때문에 확실하지 않지만 SQL이 varchar stackoverflow.com/a/11989599를 허용하는 것처럼 보이지만 답변은 mysql에 맞습니다.
CrandellWS

@Aaron 내 필드가 char (1)이지만 enum ( 'm', 'f')로 변환하고 싶습니까?
dinesh kandpal

17

SELECT id || '' FROM some_table;
or SELECT id::text FROM some_table;

postgresql이지만 mySql은 그것을 허용하지 않습니다!

mySql의 지름길 :

SELECT concat(id, '') FROM some_table;

1
안녕하세요, SELECT concat (id, '') FROM some_table; MySQL의 좋은 해킹입니다. 감사합니다!
Charles Cavalcante

그래, 그게
다야

3

MySQL은 없지만 해킹을 사용할 수있는 RDBMS (Postgres 등)가 있습니다.

SELECT id || '' FROM some_table;

연결은 암시 적 변환을 수행합니다.


1
Postgres는 ":: data_type"이라는 명확하고 간결한 캐스팅을 가지고 있습니다. 여기서 적절한 방법을 사용하지 않는 것은 부끄러운 일입니다. Mysql의 concat 또는 +0은 정당화됩니다
AdrianBR

2

정수 열 xa varchar열 을 비교하는 문제를 해결했습니다.

where CAST(Column_name AS CHAR CHARACTER SET latin1 ) collate latin1_general_ci = varchar_column_name



0

나는 이것을 일반적인 용어로 대답 할 것이며, 위의 기여자들에게 매우 감사합니다.
MySQL Workbench에서 MySQL을 사용하고 있습니다. 방법을 사용하여 a char와 a를 int함께 연결하려는 비슷한 문제가 발생했습니다 GROUP_CONCAT. 요약하면, 나를 위해 일한 것은 다음과 같습니다.

당신 char이 'c'이고 int'i' 라고 가정 해 봅시다 . 그러면 쿼리는 다음과 같습니다.
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...


0

다음과 같이 할 수 있어야합니다.

Select (id :> VARCHAR(10)) as converted__id_int
from t9 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.