Вставить 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;