web-dev-qa-db-fra.com

Cast int à varchar

J'ai la requête ci-dessous et je dois convertir id en varchar

Schéma

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

Ce que j'ai essayé

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

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

mais ils ne travaillent pas. Veuillez suggérer.

94
Mario

Vous aurez besoin de cast ou convert en tant que type de données CHAR, il n'y a pas de type de données varchar que vous pouvez convertir/convertir en données:

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

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

Voir le SQL suivant - en action - sur SQL Fiddle :

/*! 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;

Outre le fait que vous tentiez de convertir un type de données incorrect, la syntaxe que vous utilisiez pour convert était incorrecte. La fonction convert utilise les éléments suivants, où expr est votre colonne ou votre valeur:

 CONVERT(expr,type)

ou 

 CONVERT(expr USING transcoding_name)

Votre requête d'origine avait la syntaxe à l'envers.

182
Taryn

Vous obtenez cela parce que "VARCHAR" n'est pas un type valide dans lequel lancer. Selon les documents MySQL ( http://dev.mysql.com/doc/refman/5.5/fr/cast-functions.html#function_cast ), vous ne pouvez lancer que: 

  • BINAIRE [(N)]
  • CHAR [(N)]
  • RENDEZ-VOUS AMOUREUX
  • DATETIME
  • DÉCIMAL [(M [ D])]
  • SIGNÉ
  • [ENTIER]
  • TEMPS
  • UNSIGNED [INTEGER]

Je pense que votre meilleur pari est d'utiliser CHAR.

30
Aaron

Oui 

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

est postgresql, mais mySql ne le permet pas!

raccourci dans mySql:

SELECT concat(id, '') FROM some_table;
12
nancy

Je n'ai pas MySQL, mais il y a des SGBDR (Postgres, entre autres) dans lesquels vous pouvez utiliser le hack

SELECT id || '' FROM some_table;

La concaténation effectue une conversion implicite.

3
Andrew Lazarus

utilisation : 

SELECT cast(CHAR(50),id) as colI1 from t9;
0
user2132046