2011-11-01 3 views
11

Jak przekonwertować Varchar na Int w serwerze sql 2008.Jak przekonwertować Varchar na Int w serwerze sql 2008?

Mam następujący kod, gdy próbowałem go uruchomić, nie pozwoliło mi przekonwertować Varchar na Int.

Select Cast([Column1] as INT) 

Kolumna 1 jest typu Varchar (21) NOT NULL i chciałem ją zamienić na Int. faktycznie próbuję wstawić Column1 do innej tabeli o Field jako INT. Czy ktoś może mi pomóc, aby to przekonwertować?

Odpowiedz

13

Spaces nie będzie problemem dla cast jednak postacie jak TAB, CR lub LF pojawi się jako przestrzenie nie zostaną przycięte przez LTRIM lub RTRIM, i będzie problemem.

Na przykład spróbuj wykonać następujące czynności:

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

Sprawdź swój wkład do tych znaków i jeśli je znaleźć, należy REPLACE oczyścić swoje dane.


Per Twojego komentarza można używać REPLACE jako część cast:

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

Jeśli jest coś, co będzie często dzieje, byłoby lepiej, aby oczyścić dane i modyfikować sposób wypełnienia tabeli w celu usunięcia wartości CR i LF przed jej wprowadzeniem.

+0

Tak, masz rację w "@ v3" jest taki sam warunek z moim scenariuszem jest tam jakikolwiek sposób lub rozwiązanie nad nim, abyśmy mogli przekonwertować go z varchar do int? –

+0

@VikrantMore, zaktualizowałem moją odpowiedź, aby uwzględnić użycie 'REPLACE', aby usunąć' CRLF'. –

2

W ten sposób można to zrobić, czy powoduje błąd? Czy na pewno wartość, którą próbujesz przekonwertować, jest zamienna? Z oczywistych powodów nie można przekształcić abc123 w int.

UPDATE

oparciu o komentarze Chciałbym usunąć wszelkie przestrzenie, które są w wartości, które próbują nawracać.

+0

@AbeMiessler tak moje wartości w kolumnach są 66 że albo 2 nie ma pojedyncze znaki, ale nie było Tylko Left Trailing Blank Spaces. –

+1

Jaki błąd polega na rzucaniu? Jesteś pewien, że nie ma tam żadnych spacji? –

+0

Czy są jakieś NULL wartości? – Eric

1

To jest poprawny sposób przekonwertowania go na INT, o ile nie masz żadnych znaków alfabetu ani wartości NULL.

Jeśli masz jakiekolwiek wartości NULL, należy użyć

ISNULL(column1, 0) 
+0

Tak, wiem, że dla ISNULL, ale nie mamy żadnych zerowych wartości, które musimy ręcznie do conert od Varchar do Int. –

+1

Twierdzi, że kolumna ma wymuszone "NIE NULL". –

+0

Używam Wybierz konwersję (int, "Au"), ale nadal pojawia się błąd niepowodzenia konwersji. Jakieś wskazówki? Dziękuję –

8

można użyć funkcji konwersji:

Select convert(int,[Column1]) 
0

Wypróbuj poniższy kod. W większości przypadków jest to spowodowane przecinkiem.

cast(replace([FIELD NAME],',','') as float) 
0

Spróbuj z polecenia poniżej i będzie prosić wszystkich wartości INT

wybierz przypadek kiedy IsNumeric (YourColumn +”.0E0') = 1 następnie wylewane (YourColumn jako int) inny NULL końcowego/* przypadku */ z YourTable