cast(varchar_col AS int) -- SQL standard o
varchar_col::int -- Postgres syntax shorthand Estas variantes de sintaxis son válidas (casi) en cualquier lugar . El segundo puede requerir paréntesis anidados en situaciones especiales:
- PostgreSQL:crea un índice sobre la longitud de todos los campos de la tabla
Y el primero puede ser necesario cuando las restricciones sintácticas solo permiten la notación funcional:
- PostgreSQL:operador CAST vs ::en la función de tabla LATERAL
Hay dos variantes más:
int4(varchar_col) -- only works for some type names
int '123' -- must be an untyped, quoted string literal
Tenga en cuenta cómo escribí int4 (varchar_col) . Ese es el nombre del tipo interno y también hay una función definida para él. No funcionaría como o integer() .int()
Tenga en cuenta también que la última forma no funciona para array tipos tiene que ser int[] '{1,2,3}' '{1,2,3}'::int[] o cast('{1,2,3}' AS int[]) .
Detalles en el manual aquí y aquí .
Para ser válido para integer , la cadena debe estar compuesta por un signo inicial opcional (+ /- ) seguido solo de dígitos. Se ignoran los espacios en blanco iniciales/posteriores.