Come posso convertire un intero in una stringa come parte di una query PostgreSQL?


118

Come posso convertire un intero in una stringa come parte di una query PostgreSQL?

Quindi, ad esempio, ho bisogno di:

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

dove <some integer>può essere lungo da 1 a 15 cifre.


Cosa farai se la tua stringa ha zeri iniziali?
thisfeller

Risposte:


123

Poiché il numero può contenere fino a 15 cifre, ti consigliamo di eseguire il cast su un numero intero a 64 bit (8 byte). Prova questo:

SELECT * FROM table
WHERE myint = mytext::int8

L' ::operatore del cast è storico ma conveniente. Postgres è inoltre conforme alla sintassi standard SQL

myint = cast ( mytext as int8)

Se hai un testo letterale che vuoi confrontare con un int, lancia il inttesto in:

SELECT * FROM table
WHERE myint::varchar(255) = mytext

43
Ah. In realtà ne avevo bisogno al contrario (myint convertito in varchar) ma la tua risposta è stata sufficiente per guidarmi nel posto giusto. L'ho appena fatto myint::varchar(255) = mytexte funziona. Grazie!
spyd3rr

3
A rigore, questo non risponde alla domanda. L'esempio non era il problema: lo era la conversione di un intero in un carattere / stringa. Ma grazie, @ spyd3rr
Frederik Struck-Schøning

@fred Non è così: il problema effettivo di OP stava tentando senza successo di confrontare valori numerici e di testo. Questa risposta mostra come risolverlo trasmettendo il testo a un numero (anche se OP ha provato a trasmettere un numero al testo).
Bohemian

7
@ Bohemian Il titolo e il testo della domanda dice: "Come faccio a convertire un intero in una stringa come parte di una query PostgreSQL?". Quindi un esempio di quando questo potrebbe essere rilevante. Nel mio caso, ho trovato questo thread perché in realtà dovevo convertire un numero intero in una stringa, non per il confronto ma per l'utilizzo all'interno di una funzione aggregata che avrebbe avuto esito negativo, se l'argomento non fosse una stringa. In tal caso, questa non era una risposta alla domanda, poiché si legge letteralmente atm.
Frederik Struck-Schøning

126

Puoi eseguire il cast di un numero intero su una stringa in questo modo

intval::text

e così nel tuo caso

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

1
Questo non funzionerà se stai lavorando con SpEL nelle query native jpa. Dovrai usare il cast in quel caso.
Raj Shah

12

Potresti farlo:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.