将int转换为varchar

Mar*_*rio 110 mysql sql database casting mariadb

我有以下查询,需要转换idvarchar

架构

create table t9 (id int, name varchar (55));
insert into t9( id, name)values(2, 'bob');
Run Code Online (Sandbox Code Playgroud)

我尝试了什么

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

select CONVERT(VARCHAR(50),id) as colI1 from t9;
Run Code Online (Sandbox Code Playgroud)

但他们不起作用.请建议.

Tar*_*ryn 201

您将需要castconvert作为CHAR数据类型,没有varchar可以转换/转换数据的数据类型:

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

select CONVERT(id, CHAR(50)) as colI1 
from t9;
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle中查看以下SQL - in action - over :

/*! 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;
Run Code Online (Sandbox Code Playgroud)

除了您尝试转换为不正确的数据类型之外,您使用的语法convert不正确.该convert函数使用以下expr列表或值:

 CONVERT(expr,type)
Run Code Online (Sandbox Code Playgroud)

要么

 CONVERT(expr USING transcoding_name)
Run Code Online (Sandbox Code Playgroud)

您的原始查询具有向后的语法.

  • 可能值得一提的是,您不必提供长度 - 强制转换和转换都将允许执行类似于 select CAST(id as CHAR) as col1 from t9; 的操作; (2认同)
  • @Pacerier IMO,使用`concat()`进行转换并不一定那么直观.我更喜欢我的代码清晰,而且没有多大意义. (2认同)

Aar*_*ron 35

你得到的是因为"VARCHAR"不是一个有效的类型.根据MySQL文档(http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast),您只能转换为:

  • BINARY [(N)]
  • CHAR [(N)]
  • 日期
  • 约会时间
  • DECIMAL [(M [,d])]
  • [整数]
  • 时间
  • UNSIGNED [INTEGER]

我认为你最好的选择是使用CHAR.

  • +1用于列出正确的数据类型,并说明varchar不起作用的原因. (2认同)

小智 13

SELECT id || '' FROM some_table;
or SELECT id::text FROM some_table;
Run Code Online (Sandbox Code Playgroud)

是postgresql,但mySql不允许这样!

mySql中的捷径:

SELECT concat(id, '') FROM some_table;
Run Code Online (Sandbox Code Playgroud)

  • 嘿,从 some_table 中选择 concat(id, ''); 是一个很好的MySQL hack,谢谢! (2认同)