Вставить int в varchar

У меня есть запрос ниже и нужно отбрасывать 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;

но они не работают. Пожалуйста, предложите.

Ответ 1

Вам нужно cast или convert как тип данных CHAR, там не является типом varchar, который вы можете преобразовывать/преобразовывать данные в:

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

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

См. следующий SQL - в действии - в 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;

Кроме того, что вы пытались преобразовать в неправильный тип данных, синтаксис, который вы использовали для convert, был неправильным. Функция convert использует следующее, где expr - ваш столбец или значение:

 CONVERT(expr,type)

или

 CONVERT(expr USING transcoding_name)

В исходном запросе был синтаксис назад.

Ответ 2

Вы получаете это, потому что "VARCHAR" не является допустимым типом для вставки. Согласно документам MySQL (http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast), вы можете использовать только:

  • БИНАРНЫЙ [(N)],
  • CHAR [(N)],
  • DATE
  • DATETIME
  • ДЕСЯТИЧНАЯ [(М [, D])]
  • ПОДПИСАЛИ
  • [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

Я думаю, что лучше всего использовать CHAR.

Ответ 3

Да

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

- postgresql, но mySql этого не позволяет!

короткое сокращение в mySql:

SELECT concat(id, '') FROM some_table;

Ответ 4

У меня нет MySQL, но есть RDBMS (Postgres, среди других), в которых вы можете использовать хак

SELECT id || '' FROM some_table;

Конкатенация делает неявное преобразование.

Ответ 5

Я решил проблему сравнения целочисленного столбца x столбца varchar с

", где CAST (Column_name AS CHAR CHARACTER SET latin1) сопоставляет latin1_general_ci = varchar_column_name"

Ответ 6

ПОЧЕМУ?

mysql> SELECT CAST(1 AS CHAR) + CAST(1 AS CHAR);
+-----------------------------------+
| CAST(1 AS CHAR) + CAST(1 AS CHAR) |
+-----------------------------------+
|                                 2 |
+-----------------------------------+
1 row in set (0.00 sec)

Ответ 7

использовать:

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