¿Cómo convierto un número entero en una cadena como parte de una consulta de PostgreSQL?

118

¿Cómo convierto un número entero en una cadena como parte de una consulta de PostgreSQL?

Entonces, por ejemplo, necesito:

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

donde <some integer>puede tener entre 1 y 15 dígitos.

spyd3rr
fuente
¿Qué harás si tu cadena tiene ceros a la izquierda?
thisfeller

Respuestas:

123

Dado que el número puede tener hasta 15 dígitos, deberá convertirlo en un entero de 64 bits (8 bytes). Prueba esto:

SELECT * FROM table
WHERE myint = mytext::int8

El ::operador de yeso es histórico pero conveniente. Postgres también se ajusta a la sintaxis estándar SQL

myint = cast ( mytext as int8)

Si tiene un texto literal que desea comparar con un int, envíe el inttexto a:

SELECT * FROM table
WHERE myint::varchar(255) = mytext
Bohemio
fuente
43
¡Ah! De hecho, lo necesitaba al revés (myint convertido a varchar) pero su respuesta fue suficiente para guiarme al lugar correcto. Acabo de hacerlo myint::varchar(255) = mytexty funciona. ¡Gracias!
spyd3rr
3
Estrictamente, esto no responde a la pregunta. El ejemplo no fue el problema: convertir un número entero en un carácter / cadena sí lo fue. Pero gracias, @ spyd3rr
Frederik Struck-Schøning
@fred No es así: el problema real de OP fue intentar comparar valores numéricos y de texto sin éxito. Esta respuesta muestra cómo solucionarlo enviando el texto a un número (aunque OP intentó enviar un número al texto).
Bohemian
7
@Bohemian El título y el texto de la pregunta dicen: "¿Cómo convierto un número entero en una cadena como parte de una consulta PostgreSQL?". Luego, un ejemplo de cuándo esto podría ser relevante. En mi caso, encontré este hilo porque en realidad tuve que convertir un número entero en una cadena, no para comparar sino para usar dentro de una función agregada que fallaría, si el argumento no fuera una cadena. En cuyo caso, esta no fue una respuesta a la pregunta, ya que literalmente dice atm.
Frederik Struck-Schøning
126

Puede convertir un número entero a una cadena de esta manera

intval::text

y asi en tu caso

SELECT * FROM table WHERE <some integer>::text = 'string of numbers'
Brugolo
fuente
1
Esto no funcionará si está trabajando con SpEL en consultas nativas jpa. Tendrás que usar yeso en ese caso.
Raj Shah
12

Podrías hacer esto:

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