136

我有以下查询,需要转换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

8 回答 8

247

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

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

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

请参阅SQL Fiddle上的以下 SQL(实际操作):

/*! 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)

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

于 2013-03-12T18:09:24.210 回答
38

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

  • 二进制[(N)]
  • 字符[(N)]
  • 日期
  • 约会时间
  • 十进制[(M[,D])]
  • [整数]
  • 时间
  • 无符号[整数]

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

于 2013-03-12T18:08:42.157 回答
19

是的

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

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

mySql 中的捷径:

SELECT concat(id, '') FROM some_table;
于 2015-09-12T18:08:32.807 回答
3

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

SELECT id || '' FROM some_table;

连接进行隐式转换。

于 2013-03-13T06:24:22.563 回答
2

我解决了一个将整数列 xavarchar列与

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

于 2016-05-18T01:51:34.047 回答
0

利用 :

SELECT cast(CHAR(50),id) as colI1 from t9;
于 2013-03-12T18:08:28.850 回答
0

我将笼统地回答这个问题,非常感谢上述贡献者。
我在 MySQL Workbench 上使用 MySQL。我在尝试使用该方法将 achar和 an连接在一起时遇到了类似的问题。总之,对我有用 的是:假设你是'c'并且是'i',所以,查询变成:intGROUP_CONCAT

charint
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...

于 2018-03-16T21:01:14.597 回答
0

也应该能够做这样的事情:

Select (id :> VARCHAR(10)) as converted__id_int
from t9 
于 2020-04-03T17:25:00.123 回答