2017-05-23 3 views
-1

Ich versuche, das folgende in eine ganze Zahl zu konvertieren, so dass ich Berechnungen von 123.456.789 bis 123456789 ausführen kann.Cast oder konvertieren Varchar in SQL Server zu INT

aber wenn ich versuche,

CAST([Total number] AS INT) 

ODER

CONVERT(int, [Total number]) 

dann bekomme ich einen Fehler

Fehler bei der Konvertierung, wenn der varchar Wert '123.456.789' in den Datentyp Umwandlung int.

+0

benötigen Sie dieses 123456789 –

+0

das ist genau das richtige – Probs

+0

hinzufügen WHERE ersetzen ([Gesamtzahl], '', '') NOT LIKE '% [^ 0-9]%' 'um sicherzustellen, dass nur ganze Zahlen konvertiert werden. – jarlh

Antwort

3

den Punkt Unter der Annahme ist nicht ein Bruchteil Teiler und Ihre Zahl ist integer (nicht float/dezimal) - Sie können nur Punkte aus dem String entfernen vor der Umwandlung so etwas wie:

CAST(replace([Total number], '.', '') AS int) 
4
Declare @val varchar(100)='123.456.789' 

SELECT CAST (REPLACE (@val,'.','') AS INT) As Intval 
+0

Aber jetzt deklarierst du nur 1 Wert, der in meinem Beispiel. Wie würden Sie dies für mehrere Spalten oder mehrere Werte tun? Besser UPDATE verwenden und SET nein? – Probs

0

Sie können try_convert verwenden oder try_cast auch wenn es keine Sonderzeichen hat es

Select try_convert(int, replace([Total number], '.', '')) 
+0

Nice one! Danke Kannan :) – Probs

0

in diesem Fall null zurück Ist das Ihr Anforderung unter

Declare @val TABLE (ID INT IDENTITY,Val varchar(100)) 

INSERT INTO @val 
SELECT '356.345.789' UNION ALL 
SELECT '123.456.333' UNION ALL 
SELECT '444.124.444' UNION ALL 
SELECT '347.456.555' UNION ALL 
SELECT '123.666.789' UNION ALL 
SELECT '678.432.789' UNION ALL 
SELECT '789.456.111' UNION ALL 
SELECT '123.457.123' UNION ALL 
SELECT '333.111.789' 


SELECT ROW_NUMBER()OVER(Order by (SELECT 1)) AS Rno, 
     CAST(REPLACE (Val,'.','') AS INT) As Intval 
FROM @val 
Verwandte Themen