2009-04-08 19 views

cevap

199

Sen CAST or CONVERT kullanabilirsiniz:

SELECT CAST(MyVarcharCol AS INT) FROM Table 

SELECT CONVERT(INT, MyVarcharCol) FROM Table 
+3

Alanlardan biri sayısal değilse, özel durumu nasıl yakalarım/engellerim? 0 – Chloe

+30

'a dönmesini beklerdim: 'CASE WHEN ISNUMERIC (' x ') = 1 SONRA CAST (' x 'IN INT) ELSE 0 END' – Chloe

+8

Sadece bir kelime:' IsNumeric() 'can bazı sapık sonuçlar doğurur. "-." Dizesi için TRUE değerini döndürür. Bu, bir sayıya yayınlamaya çalıştığınızda hala bir hataya neden olur. – Curt

8

Ayrıca '56.72' yani sayısal dize dönüştürürken bir SQL hatası karşı gelebilir INT unutmayın. aşağıdaki gibi

Conversion failed when converting the varchar value '56.72' to data type int. 

sadece iki dönüştürür yapmak Bundan kaçınmak için:

STRING -> SAYISAL -> INT

veya

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT) 

TABLEB için TableA veri kopyalama, dönüştürme, örtülü olduğundan, ikinci dönüşüme ihtiyacınız yoktur (en yakın INT'ye doğru yuvarlamadan mutluysanız):

INSERT INTO TableB (MyIntCol) 
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol] 
FROM TableA