Como faço para converter um inteiro em string como parte de uma consulta PostgreSQL?

118

Como faço para converter um inteiro em string como parte de uma consulta PostgreSQL?

Então, por exemplo, eu preciso:

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

onde <some integer>pode ter de 1 a 15 dígitos.

spyd3rr
fonte
O que você fará se sua string tiver zeros à esquerda?
thisfeller

Respostas:

123

Como o número pode ter até 15 dígitos, você precisará converter para um número inteiro de 64 bits (8 bytes). Experimente isto:

SELECT * FROM table
WHERE myint = mytext::int8

O ::operador de elenco é histórico, mas conveniente. Postgres também está em conformidade com a sintaxe padrão SQL

myint = cast ( mytext as int8)

Se você tiver um texto literal que deseja comparar com um int, converta o intpara o texto:

SELECT * FROM table
WHERE myint::varchar(255) = mytext
Boêmio
fonte
43
Ah. Na verdade, eu precisava do contrário (myint convertido em varchar), mas sua resposta foi o suficiente para me guiar até o lugar certo. Eu acabei de fazer myint::varchar(255) = mytexte funciona. Obrigado!
spyd3rr
3
Estritamente, isso não responde à pergunta. O exemplo não era o problema - converter um inteiro em um caractere / string era. Mas obrigado, @ spyd3rr
Frederik Struck-Schøning
@fred Não é bem assim: o problema real do OP era tentar sem sucesso comparar valores numéricos e de texto. Esta resposta mostra como consertar isso convertendo o texto em um número (embora OP tenha tentado converter um número em texto).
Boêmio
7
@Bohemian O título e o texto da pergunta dizem: "Como faço para converter um inteiro em string como parte de uma consulta PostgreSQL?". Então, um exemplo de quando isso pode ser relevante. No meu caso, encontrei este segmento porque na verdade tive que converter um inteiro em uma string - não para comparação, mas para usar dentro de uma função de agregação que iria falhar, se o argumento não fosse uma string. Nesse caso, esta não foi uma resposta à pergunta, já que literalmente se lê atm.
Frederik Struck-Schøning
126

Você pode converter um inteiro em uma string desta forma

intval::text

e então no seu caso

SELECT * FROM table WHERE <some integer>::text = 'string of numbers'
Brugolo
fonte
1
Isso não funcionará se você estiver trabalhando com SpEL em consultas nativas jpa. Você terá que usar elenco nesse caso.
Raj Shah
12

Você poderia fazer isso:

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