Bir dizeyi sql sorgusunu kullanarak int'e dönüştürme


169

SQL Server 2005'te SQL sorgusunu kullanarak bir dizeyi tamsayıya nasıl dönüştürebilirim?

Yanıtlar:


298

CAST veya CONVERT kullanabilirsiniz :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Alanlardan biri sayısal olmadığında özel durumu nasıl yakalarım / önlerim? 0'a
Chloe

40
Bulunan:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
Sadece bir kelime: IsNumeric()sapkın sonuçlar üretebilir. "-." Dizgisi için TRUE döndürür ve bu sayıya çevirmeye çalıştığınızda hataya neden olur.
Curt

3
IsNumeric, "-" içeren dizeler için yalnızca dize, örneğin "-5" veya "-20" için sayısal ise, "5-", "-2-1" gibi dizeler için yanlış olur. Eğer isNumeric () doğruysa dönüşüm o zaman istisna oluşturmamalıdır
Pratyush Dhanuka

11

Ayrıca sayısal dizeden INT'ye dönüştürürken '56.72'bir SQL hatasına karşı gelebileceğinizi de unutmayın.

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

Bu sorunu çözmek için aşağıdaki gibi iki dönüştürme yapın:

STRING -> SAYISAL -> INT

veya

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

TableA'dan TableB'ye veri kopyalarken, dönüştürme örtüktür, bu nedenle ikinci dönüştürmeye ihtiyacınız yoktur (en yakın INT'ye yuvarlama işleminden memnunsanız):

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

8

SQL Server 2012'den başlayarak TRY_PARSE veya TRY_CONVERT kullanabilirsiniz .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

SQL Server 2005 ile ilgili olduğu için orijinal soru için kesinlikle doğru cevap değil, ancak 2019 olduğundan ve daha az insan SQL Server'ın eski bir sürümüne bağlandığından, bu cevap kesinlikle yararlıdır.
1919'da

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.