将int转换为varchar


119

我在下面的查询中,需要转换idvarchar

架构图

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;

但它们不起作用。请提出建议。


4
下次,请确保包括您看到的实际错误消息。这通常有助于找出问题所在。这次您很幸运,我们中的许多人刚好知道这里发生了什么。
亚伦

Answers:


218

您将需要castconvert作为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)

您的原始查询的语法向后。


可能值得一提的是,您不必提供长度-强制转换和转换都会允许选择tAST中的CAST(id为CHAR)作为col1;
乔纳森·赛斯

1
@JonathanSayce这是不好的做法,不使用的长度,我建议您阅读不良习惯踢:宣布不VARCHAR(长度)阿龙贝特朗
泰伦

有趣的帖子-感谢@bluefeet-在转换/转换场景中,我假设它会使用所需的大小,而不是任意的大小。
Jonathan Sayce 2014年

@JonathanSayce我对MySQL的来龙去脉不是很熟悉,它可能不会使用任意东西,但是我不会依靠MySQL引擎那么聪明(对MySQL没有冒犯)。为了确保您获得正确的长度,我将始终明确提供一个长度。
Taryn

2
@Pacerier IMO,concat()用来进行转换不一定那么直观。我希望我的代码清晰明了,但这并没有多大意义。
塔琳

35

之所以得到它,VARCHAR是因为这不是强制类型。根据MySQL文档(http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast),您只能转换为:

  • BINARY [(N)]
  • 字符[(N)]
  • 日期
  • 约会时间
  • DECIMAL [(M [,D])]
  • [整数]
  • 时间
  • 未签名的[INTEGER]

我认为最好的办法就是使用CHAR


不知道是因为我使用mysql,但似乎SQL允许varchar stackoverflow.com/a/11989599,尽管您的回答对mysql是正确的,谢谢。
CrandellWS 2014年

@Aaron如果我的字段是char(1)但我想将其转换为enum('m','f')怎么办?
dinesh kandpal

17

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

是postgresql,但是mySql不允许这样做!

mySql的快捷方式:

SELECT concat(id, '') FROM some_table;

1
嘿,从some_table中选择concat(id,''); 是MySQL的好工具,谢谢!
Charles Cavalcante

是的,就是这样
George Garchagudashvili

3

我没有MySQL,但是可以在其中使用RDBMS(Postgres等)

SELECT id || '' FROM some_table;

串联进行隐式转换。


1
Postgres的样式简洁明了,“ :: data_type”。不使用正确的方法会很可惜。Mysql的concat或+0虽然是合理的
AdrianBR

2

我解决了将整数Column xa varcharcolumn与

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



0

我将概括地回答这一点,非常感谢上述贡献者。
我在MySQL Workbench上使用MySQL。尝试使用方法将a char和a串联int在一起时,我遇到了类似的问题GROUP_CONCAT。总之,对我有用的是:

假设您char是“ c”和int“ i”,因此查询变为:
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...


0

应该也可以做这样的事情:

Select (id :> VARCHAR(10)) as converted__id_int
from t9 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.