INT birimini VARCHAR SQL birimine dönüştür


341

Sybase kullanıyorum ve bana "iftype" adlı bir sütun döndüren bir seçim yapıyorum, ancak türü int ve ben varchar dönüştürmek gerekiyor. Convert işlevi olmadan seçim yapmaya çalıştığımda bu hatayı alıyorum:

Hata kodu 257, SQL durumu 37000: 'VARCHAR' veri tipinden 'INT'ye veri geçişine izin verilmiyor. Bu sorguyu çalıştırmak için CONVERT işlevini kullanın.

İşlevin nasıl uygulanacağını bilmiyorum CONVERT. Biri bana yardım edebilir mi lütfen?


Yanıtlar:


593

Convert işlevini kullanın.

SELECT CONVERT(varchar(10), field_name) FROM table_name

8
Yanılgıya göre, bu kadar VARCHARhiç INTama onun sorusunu değil, hata mesajı cevap veriyorum.
Tobberoth

2
Teşekkürler. Ama şimdi başka bir hatayla karşılaştım. Bu tür bir seçim yapmaya çalıştığımda: SELECT CONVERT (varchar (10), alan_adı) FROM tablo_adı. Ya da normal gibi: SELECT alan_adı FROM tablo_adı. İkisi de doğru. Neden bilmiyorum. Ama ben seçimin sonunda bir "nerede" denemek, dönüştürmek veya değil kullanarak, ben aynı hatayı alıyorum: 'VARCHAR' veri türünden 'INT' için örtük dönüşüm izin verilmiyor. Bu sorguyu çalıştırmak için CONVERT işlevini kullanın
Murilo

3
@Murilo Çünkü hata düşündüğünüzden değil. Hata, kodunuzun gerekli bir varcharyeri kullanmaya çalıştığını bildirir int. Size yardımcı olabilmemiz için gerçek SQL ifadenizi yazmanız gerekir.
Tobberoth

14
@Tobberoth, buna değer için, sadece googling ile buraya indim. SO'nun değerinin bir kısmı, temel sorulara bile neredeyse her soruya cevap almaktır.
KyleMit

6
Sanırım varchar(11)sayının büyük bir negatif sayı olması gerekir.
Trisped

100

STRİşlevi kullanın :

SELECT STR(field_name) FROM table_name

Argümanlar

float_expression

Ondalık basamaklı yaklaşık sayısal (kayan noktalı) veri türünün bir ifadesidir.

uzunluk

Toplam uzunluk. Bu ondalık nokta, işaret, rakam ve boşlukları içerir. Varsayılan 10'dur.

ondalık

Ondalık noktasının sağındaki yer sayısıdır. ondalık, 16'dan küçük veya ona eşit olmalıdır. Ondalık 16'dan büyükse, sonuç ondalık noktasının sağındaki on altı yere kesilir.

kaynak: https://msdn.microsoft.com/en-us/library/ms189527.aspx


3
STR()doğru cevap olmalı, alternatiflerden daha basit ve daha az hataya açık.
HerrimanCoder

7
Tuhaf bir nedenden dolayı, metnin önüne bir sekme eklediği için bu benim için işe yaramadı, neden olduğu hakkında hiçbir fikrim yok. Seçilen çözüm işe yaradı.
MaQy

3
Dönüştürülen sayının önündeki str pads boşlukları işe yaramaz
m12lrpv

13
LTRIM

2
STR (), dizeye dönüştürdüğünüz değişkenin önündeki boşlukları verir. Ondalık değişkenleri dönüştürmek iyi bir seçim olabilir, ancak Int için değil.
Ebleme

23

CASTFonksiyonu kullanabilirsiniz :

SELECT CAST(your_column_name AS varchar(10)) FROM your_table_name

3

Aslında STR veya Convert kullanmanıza gerek yok. Sadece 'xxx' seçin + LTRIM (1) işi yapar. Muhtemelen LTRIM, kaputun altında Convert veya STR kullanır.

LTRIM ayrıca uzunluk sağlama ihtiyacını da ortadan kaldırır ve genellikle varsayılan 10, tamsayıdan dizeye dönüştürme için yeterince iyidir.

SELECT LTRIM(ColumnName) FROM TableName

0

CONVERT(DATA_TYPE , Your_Column)SQL'de CONVERT yönteminin sözdizimidir. Bu dönüştürme işlevinden virgülün (,) sağ tarafındaki Sütun verilerini virgülün (,) sol tarafındaki veri türüne dönüştürebiliriz. Lütfen aşağıdaki örneğe bakın.

SELECT CONVERT (VARCHAR(10), ColumnName) FROM TableName
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.