VARCHAR'dan INT'ye Yayın - MySQL


267

Şimdilik Verilerim

SELECT PROD_CODE FROM `PRODUCT`

dır-dir

PROD_CODE
2
5
7
8
22
10
9
11

Dört sorguyu da denedim ve hiçbiri işe yaramadı. ( Ref )

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT;

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT;

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT;

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT;

Tüm aşağıdaki gibi sözdizimi hatalarını atar:

SQL sözdiziminizde bir hata var; ') yakınında doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin.

SQL sözdiziminizde bir hata var; 'INTEGER yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın).

MySQL'de varchar değerini tamsayıya dökmek için doğru sözdizimi nedir?

MySQL Sürümü: 5.5.16


Her girişim için hangi hatayı bildiriyor? Girdileriniz neler? Oluyor sözde döküm sonuç kümesindeki herhangi bir kayıt için başarısız olursa sorgu başarısız. En azından, sql standardının söylediği şey, MySql standarttaki güvenlik kurallarını ihlal ettiği için kötü şöhretli olmasına rağmen. Ve kayıt için, listelenen 2. ve 4. örnekler doğrudur.
Joel Coehoorn

Yanıtlar:


552

Döküm İşlevleri ve Operatörlerinde açıklandığı gibi :

Sonucun türü aşağıdaki değerlerden biri olabilir:

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

Bu nedenle, şunları kullanmalısınız:

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
İmzasız çalışıyor. MySQL tamsayı veri tipini ne zamandan İmzasız olarak değiştirdi?
Lenin Raj Rajasekaran

20
@emaillenin: Döküm için veri türleri, sütunlarınkilerle aynı değildir, çünkü verilerin nasıl yorumlanacağı hakkında ek bilgi gereklidir, örneğin tamsayıların imzalanıp imzalanmadığı.
eggyal

13
Bu bilgi için teşekkürler. MySQL belgeleri benim için kaotik, bu yüzden bu çok yardımcı oldu.
Racky

Ben Daha sonra 10,2 (DECIMAL olarak değiştirdim .. ÇİFT (10,2) OLARAK CAST (num_col ile sorunları başlamıştı) ve işe yaradı Tnanks.
Nava Bogatee

MariaDB'de gayet iyi CAST(PROD_CODE AS INT) çalışıyor .
Paul Spiegel

57

Varchar alanlarını / değerlerini sayı biçimine dökmek için küçük kesmek kullanılabilir:

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT`

9
Basit, belgelenmiş, desteklenen ve önerilen bir çözüm olduğunda neden böyle bir "hack" kullanılsın?
eggyal

31
@eggyal TL; DR: bahsettiğiniz "hack", basit, belgelenmiş ve önerilen bir çözümdür. - - - - - - - - - - - - - Uzun Versiyon : Kılavuzdan : Ekleme daha hızlı olduğu için To cast a string to a number, you normally need do nothing other than use the string value in numeric contextkullanmak +0yerine kullanıyorum *1.
Mindwin

8
@BrianStinar kabul edilen cevap, daha iyi anlambilime sahip bir çözümün var olduğunu açıkça göstermektedir, ancak bazen, özellikle dizeleri ve sayısal türleri birleştirirken ilkel bir değerin dolaylı olarak başka bir ilkeye dökülmesi uygundur. Bu nedenle, bu özelliğin varlığı için programlama dillerini rastgele daraltmak oldukça uygunsuz görünüyor.
B12Toaster

Bu tür saldırıları kullanmayın! - kod bunlarla dolu ve geri dönmek zor olduğunda çok daha sonra ısırmak olacak çok kötü uygulama
gece

bu cevapla ben float64 ile biten bazı zamanlar buldum neden kullanacağım tercihCONVERT('123456',UNSIGNED INTEGER)
Yitzchak Weingarten
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.