Comment convertir un entier en chaîne dans le cadre d'une requête PostgreSQL?

119

Comment convertir un entier en chaîne dans le cadre d'une requête PostgreSQL?

Donc, par exemple, j'ai besoin de:

SELECT * FROM table WHERE <some integer> = 'string of numbers'

<some integer>peut contenir entre 1 et 15 chiffres.

spyd3rr
la source
Que ferez-vous si votre chaîne comporte des zéros non significatifs?
thisfeller

Réponses:

124

Étant donné que le nombre peut comporter jusqu'à 15 chiffres, vous devrez effectuer un cast en un entier de 64 bits (8 octets). Essaye ça:

SELECT * FROM table
WHERE myint = mytext::int8

L' ::opérateur de casting est historique mais pratique. Postgres est également conforme à la syntaxe standard SQL

myint = cast ( mytext as int8)

Si vous souhaitez comparer un texte littéral avec un int, transtypez le inten texte:

SELECT * FROM table
WHERE myint::varchar(255) = mytext
Bohème
la source
43
Ah. J'en avais vraiment besoin dans l'autre sens (myint converti en varchar) mais votre réponse a suffi à me guider vers le bon endroit. Je viens de le faire myint::varchar(255) = mytextet ça marche. Merci!
spyd3rr
3
Strictement, cela ne répond pas à la question. L'exemple n'était pas le problème - la conversion d'un entier en caractère / chaîne l'était. Mais merci, @ spyd3rr
Frederik Struck-Schøning
@fred Pas si: le problème réel d'OP était d'essayer sans succès de comparer les valeurs numériques et textuelles. Cette réponse montre comment résoudre ce problème en convertissant le texte en un nombre (même si OP a essayé de convertir un nombre en texte).
Bohème
7
@Bohemian Le titre et le texte de la question disent: "Comment convertir un entier en chaîne dans le cadre d'une requête PostgreSQL?". Ensuite, un exemple de quand cela pourrait être pertinent. Dans mon cas, j'ai trouvé ce fil parce que je devais en fait convertir un entier en chaîne - pas à des fins de comparaison mais pour utiliser à l'intérieur d'une fonction d'agrégation qui échouerait, si l'argument n'était pas une chaîne. Dans ce cas, ce n'était pas une réponse à la question, car il lit littéralement atm.
Frederik Struck-Schøning
126

Vous pouvez convertir un entier en chaîne de cette manière

intval::text

et ainsi dans ton cas

SELECT * FROM table WHERE <some integer>::text = 'string of numbers'
Brugolo
la source
1
Cela ne fonctionnera pas si vous travaillez avec SpEL dans les requêtes natives jpa. Vous devrez utiliser le cast dans ce cas.
Raj Shah
12

Vous pouvez faire ceci:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
djgupta
la source