Konwertuj INT na VARCHAR SQL


341

Używam Sybase i dokonuję wyboru, który zwraca mi kolumnę o nazwie „iftype”, ale jej typ to int i muszę przekonwertować na varchar. Kiedy próbuję dokonać wyboru bez funkcji konwersji, pojawia się ten błąd:

Kod błędu 257, stan SQL 37000: niejawna konwersja z typu danych „VARCHAR” na „INT” jest niedozwolona. Użyj funkcji CONVERT, aby uruchomić to zapytanie.

Nie wiem jak zaimplementować tę funkcję CONVERT. Czy ktoś może mi pomóc, proszę?


Odpowiedzi:


593

Użyj funkcji konwersji.

SELECT CONVERT(varchar(10), field_name) FROM table_name

8
Według błędu chodzi o VARCHARto, INTale odpowiadam na jego pytanie, a nie na komunikat o błędzie.
Tobberoth,

2
Dzięki. Ale teraz mam kolejny błąd. Kiedy próbuję zrobić tego rodzaju, wybierz: WYBIERZ KONWERSJĘ (varchar (10), nazwa_pola) FROM nazwa_tabeli. Lub nawet zwykły: SELECT nazwa_pola OD nazwy_tabeli. Obie są poprawne. Nie wiem dlaczego. Ale gdy próbuję tylko „gdzie” na końcu zaznaczenia, używając konwersji lub nie, otrzymuję ten sam błąd: niejawna konwersja z typu danych „VARCHAR” na „INT” jest niedozwolona. Użyj funkcji KONWERSJA, aby uruchomić to zapytanie
Murilo

3
@Murilo To dlatego, że błąd nie pochodzi z tego, co myślisz. Błąd informuje, że Twój kod próbuje użyć tam, varchargdzie intjest potrzebny. Aby nam pomóc, musisz napisać swoją rzeczywistą instrukcję SQL.
Tobberoth

14
@Tobberoth, za ile warto, właśnie wylądowałem tutaj, google. Częścią SO jest uzyskanie odpowiedzi na prawie każde pytanie, nawet podstawowe.
KyleMit,

6
Myślę, że tak powinno być varchar(11)w przypadku, gdy liczba jest dużą liczbą ujemną.
Trisped

100

Użyj STRfunkcji:

SELECT STR(field_name) FROM table_name

Argumenty

float_expression

Jest wyrażeniem przybliżonego liczbowego (zmiennoprzecinkowego) typu danych z kropką dziesiętną.

długość

To całkowita długość. Obejmuje to przecinek dziesiętny, znak, cyfry i spacje. Domyślnie jest to 10.

dziesiętny

Jest liczbą miejsc po prawej stronie przecinka dziesiętnego. liczba dziesiętna musi być mniejsza lub równa 16. Jeśli liczba dziesiętna jest większa niż 16, wynik jest skracany do szesnastu miejsc po prawej stronie przecinka.

źródło: https://msdn.microsoft.com/en-us/library/ms189527.aspx


3
STR()powinna być poprawną odpowiedzią, jest prostsza i mniej podatna na błędy niż alternatywy.
HerrimanCoder,

7
Z jakiegoś dziwnego powodu nie działało to dla mnie, ponieważ dodawało przed tekstem tabulator, nie mam pojęcia, dlaczego. Wybrane rozwiązanie działało jednak.
MaQy

3
ul podkładki miejsca na przedniej liczby przekształconego co bezużyteczne
m12lrpv

13
Użyj LTRIM (STR ())
ashilon

2
Funkcja STR () daje białe spacje z przodu zmiennej, którą konwertujesz na ciąg. Może być dobrym wyborem do konwersji zmiennych dziesiętnych, ale nie dla Int.
Ebleme


3

W rzeczywistości nie musisz używać STR ani konwertuj. Wystarczy wybrać „xxx” + LTRIM (1) wykonuje zadanie. Być może LTRIM używa Convert lub STR pod maską.

LTRIM eliminuje również potrzebę podawania długości i zwykle domyślna wartość 10 jest wystarczająca do konwersji liczby całkowitej na ciąg znaków.

SELECT LTRIM(ColumnName) FROM TableName

0

CONVERT(DATA_TYPE , Your_Column)jest składnią metody CONVERT w SQL. Z tej funkcji konwersji możemy przekonwertować dane kolumny, która znajduje się po prawej stronie przecinka (,), na typ danych po lewej stronie przecinka (,) Zobacz poniższy przykład.

SELECT CONVERT (VARCHAR(10), ColumnName) FROM TableName
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.