it-swarm.com.ru

Приведите 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;

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

94
Mario

Вам потребуется 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)

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

182
Taryn

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

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

Я думаю, что ваш лучший выбор - использовать CHAR.

30
Aaron

Да 

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

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

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

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

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

SELECT id || '' FROM some_table;

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

3
Andrew Lazarus

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

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

2
user6348455

Я отвечу на это в общих чертах и ​​очень благодарен вышеупомянутым авторам.
Я использую MySQL на MySQL Workbench. У меня была похожая проблема, когда я пытался объединить char и int вместе, используя метод GROUP_CONCAT . Итак, вот что мне помогло:

Допустим, ваш char равен 'c', а int равен 'i', поэтому запрос становится следующим:
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...

0
H.B

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

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