web-dev-qa-db-ja.com

intをvarcharにキャストします

以下のクエリがあり、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;

しかし、彼らはうまくいきません。提案してください。

102
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フィドル

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

元のクエリの構文は逆になっていました。

190
Taryn

"VARCHAR"はキャストするのに有効な型ではないためです。 MySQLのドキュメントによると( http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast )あなただけにキャストすることができます:

  • BINARY [(N)]
  • CHAR [(N)]
  • 日付
  • 日付時刻
  • DECIMAL [(M [、D])]
  • 署名済み
  • [整数]
  • 時間
  • 未割り当て[INTEGER]

私はあなたの最善の策はCHARを使うことだと思います。

33
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 WorkbenchでMySQLを使用しています。 GROUP_CONCATメソッドを使ってcharintを連結しようとしたときにも、同様の問題がありました。要約すると、私のために働いてきたのはこれです:

あなたの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