İnt'i varchar'a yayınla


119

Aşağıdaki sorgum var ve yayınlamam idgerekiyorvarchar

Şema

create table t9 (id int, name varchar (55));
insert into t9( id, name)values(2, 'bob');

Ne denedim

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

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

ama çalışmıyorlar. Lütfen önerin.


4
Bir dahaki sefere gördüğünüz gerçek hata mesajını eklediğinizden emin olun. Bu genellikle neyin yanlış olduğunu bulmaya çok yardımcı olur. Bu sefer çoğumuz burada neler olduğunu bildiğimiz için şanslıydın.
Aaron 13

Yanıtlar:


218

Veri türü olarak castya da buna ihtiyacınız olacak , veriyi dönüştürebileceğiniz / dönüştürebileceğiniz bir veri türü yoktur :convertCHARvarchar

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

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

SQL Fiddle'da aşağıdaki SQL'i iş başında görün :

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

Yanlış bir veri türüne dönüştürmeye çalıştığınız gerçeğinin yanı sıra, kullandığınız sözdizimi convertyanlıştı. convertFonksiyon aşağıdaki kullanır exprsütun veya değerdir:

 CONVERT(expr,type)

veya

 CONVERT(expr USING transcoding_name)

Orijinal sorgunuzun sözdizimi geriye doğru.


Uzunluğu sağlamanız gerekmediğini belirtmekte fayda var - hem cast hem de dönüştürme, t9'dan col1 olarak seçilen CAST (kimlik olarak CHAR) satırları boyunca bir şeye izin verecektir;
Jonathan Sayce

1
Bu bir uzunluğa kullanmayan kötü bir uygulamadır @JonathanSayce, ben okumanızı öneririz tekme için kötü alışkanlıkları: (uzunluk) olmadan VARCHAR ilan tarafından Aaron Bertrand
Taryn

İlginç bir gönderi - teşekkürler @ bluefeet - Cast / convert senaryosunda, keyfi bir şey yerine ihtiyaç duyduğu boyutu kullanacağını varsaymıştım.
Jonathan Sayce

@JonathanSayce MySQL'in giriş ve çıkışlarına fazla aşina değilim ve rastgele bir şey kullanmayabilir, ancak MySQL motorunun bu kadar akıllı olmasına güvenmem (MySQL'e karşı suç yok). Doğru uzunluğu aldığınızdan emin olmak için, her zaman açıkça bir tane verirdim.
Taryn

2
@Pacerier IMO, concat()bir dönüşüm yapmak için kullanmak mutlaka o kadar sezgisel değildir. Kodumun net olmasını tercih ederim ve bu pek bir anlam ifade etmiyor.
Taryn

35

Bunu anlıyorsunuz çünkü VARCHARiçine girmek için geçerli bir tür değil. MySQL belgelerine göre ( http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast ) sadece şunlara çevirebilirsiniz:

  • İKİLİ [(N)]
  • CHAR [(N)]
  • TARİH
  • DATETIME
  • Ondalık [(M [D])]
  • İMZA
  • [Tamsayı]
  • ZAMAN
  • İŞARETSİZ TAM SAYI]

Bence en iyisi kullanmaktır CHAR.


emin değilim çünkü mysql kullanıyorum, ancak SQL varchar stackoverflow.com/a/11989599'a izin veriyor gibi görünüyor, ancak cevabınız mysql için doğru, teşekkürler.
CrandellWS

@Aaron Ya alanım char (1) ise ancak onu enum ('m', 'f') 'e dönüştürmek istersem ??
dinesh kandpal

17

Evet

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

postgresql, ancak mySql buna izin vermiyor!

mySql'de kısa yol:

SELECT concat(id, '') FROM some_table;

1
Hey, some_table 'dan concat (id,' ') SEÇİN; MySQL için iyi bir hack, teşekkürler!
Charles Cavalcante

Evet, işte bu
George Garchagudashvili

3

MySQL'e sahip değilim, ancak hack'i kullanabileceğiniz RDBMS (diğerlerinin yanı sıra Postgres) var

SELECT id || '' FROM some_table;

Birleştirme, örtük bir dönüştürme yapar.


1
Postgres, ":: data_type" ile açık ve öz bir çeviriye sahiptir. Burada doğru yolu kullanmamak utanç verici olur.
Mysql'in

2

Bir tamsayı Sütunu xa varcharsütununu karşılaştırmakla ilgili bir sorunu çözdüm

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



0

Bunu genel hatlarıyla yanıtlayacağım ve yukarıdaki katkıda bulunanlara çok müteşekkir olacağım.
MySQL Workbench üzerinde MySQL kullanıyorum. Yöntemi kullanarak bir charve bir'yi bir intaraya getirmeye çalışırken benzer bir sorun yaşadım GROUP_CONCAT. Özetle, benim için işe yarayan şey şudur:

Diyelim ki sizin char'c' ve int'i', yani sorgu şöyle olur:
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...


0

Bunun gibi bir şey de yapabilmeli:

Select (id :> VARCHAR(10)) as converted__id_int
from t9 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.