Convertir INT en VARCHAR SQL

341

J'utilise Sybase et je fais une sélection qui me renvoie une colonne appelée "iftype", mais son type est int et j'ai besoin de convertir en varchar. Lorsque j'essaie de faire la sélection sans la fonction de conversion, j'obtiens cette erreur:

Code d'erreur 257, état SQL 37000: la conversion implicite du type de données «VARCHAR» en «INT» n'est pas autorisée. Utilisez la fonction CONVERT pour exécuter cette requête.

Je ne sais pas comment implémenter la fonction CONVERT. Quelqu'un peut-il m'aider s'il-vous-plaît ?

Murilo
la source
5
Je pense que vous en avez besoin: msdn.microsoft.com/en-us/library/ms187928.aspx
Lajos Veres

Réponses:

593

Utilisez la fonction de conversion.

SELECT CONVERT(varchar(10), field_name) FROM table_name
Tobberoth
la source
8
Selon l'erreur, c'est VARCHARà INTmais je réponds à sa question, pas au message d'erreur.
Tobberoth
2
Merci. Mais maintenant, j'ai une autre erreur. Lorsque j'essaie de faire ce type de Select: SELECT CONVERT (varchar (10), field_name) FROM table_name. Ou même la normale comme: SELECT field_name FROM table_name. Les deux sont corrects. Je ne sais pas pourquoi. Mais quand j'essaye de mais "où" à la fin de la sélection, en utilisant la conversion ou non, j'obtiens la même erreur: la conversion implicite du type de données 'VARCHAR' en 'INT' n'est pas autorisée. Utilisez la fonction CONVERT pour exécuter cette requête
Murilo
3
@ Murilo C'est parce que l'erreur ne vient pas de ce que vous pensez. L'erreur vous indique que votre code essaie d'utiliser un varcharoù un intest nécessaire. Vous devez écrire votre instruction SQL réelle pour que nous puissions vous aider.
Tobberoth
14
@Tobberoth, pour ce que ça vaut, je viens d'atterrir ici en googlant. Une partie de la valeur de SO consiste à obtenir des réponses à presque toutes les questions, même les plus élémentaires.
KyleMit
6
Je pense que ce devrait être le varchar(11)cas si le nombre est un grand nombre négatif.
Trisped
100

Utilisez la STRfonction:

SELECT STR(field_name) FROM table_name

Arguments

float_expression

Est une expression de type de données numérique approximatif (flottant) avec un point décimal.

longueur

Est la longueur totale. Cela inclut le point décimal, le signe, les chiffres et les espaces. La valeur par défaut est 10.

décimal

Est le nombre de places à droite du séparateur décimal. la décimale doit être inférieure ou égale à 16. Si la décimale est supérieure à 16, le résultat est tronqué à seize places à droite de la virgule.

source: https://msdn.microsoft.com/en-us/library/ms189527.aspx

Mahdi
la source
3
STR()devrait être la bonne réponse, c'est plus simple et moins sujet aux erreurs que les alternatives.
HerrimanCoder
7
Pour une raison étrange, cela n'a pas fonctionné pour moi car il ajoutait un onglet devant le texte, aucune idée pourquoi. La solution choisie a fonctionné cependant.
MaQy
3
str tamponne les espaces sur le devant du nombre converti le rendant inutile
m12lrpv
13
Utilisez LTRIM (STR ())
ashilon
2
STR () donne des espaces à l'avant de la variable que vous convertissez en chaîne. Cela peut être un bon choix pour convertir des variables décimales mais pas pour Int.
Ebleme
23

Vous pouvez utiliser la CASTfonction:

SELECT CAST(your_column_name AS varchar(10)) FROM your_table_name
Hamid Heydarian
la source
3

En fait, vous n'avez pas besoin d'utiliser STR ou Convert. Sélectionnez simplement 'xxx' + LTRIM (1) fait le travail. Peut-être, LTRIM utilise Convert ou STR sous le capot.

LTRIM supprime également le besoin de fournir la longueur et généralement 10 par défaut est assez bon pour la conversion d'entier en chaîne.

SELECT LTRIM(ColumnName) FROM TableName
PAS
la source
0

CONVERT(DATA_TYPE , Your_Column)est la syntaxe de la méthode CONVERT en SQL. À partir de cette fonction de conversion, nous pouvons convertir les données de la colonne qui se trouve sur le côté droit de la virgule (,) en type de données dans le côté gauche de la virgule (,) Veuillez voir l'exemple ci-dessous.

SELECT CONVERT (VARCHAR(10), ColumnName) FROM TableName
Tharuka
la source