2010-09-30 44 views
17

Quiero comprobar el tipo de valor en Postgres como esto:cómo comprobar el tipo de valor en Postgres

SELECT id, 
     CASE 
     WHEN val_is_integer THEN (SOME_QUERY) 
     WHEN val_isnot_integer THEN (ANOTHER_QUERY) 
     ELSE 0 
     END 
    FROM test; 

cómo hacerlo?


notas: el valor es de tipo varchar en la tabla, y en ese campo hay un valor numérico y es varchar ...

ejemplo:

ID | value 
1 | test 
2 | 10 
3 | 12 
4 | test123 
+3

El tipo de datos tiene que ser el mismo para todos los resultados en una sentencia CASE que devolverá un valor de columna. Pero no está claro qué columna está probando, o su tipo de datos ... De lo contrario, está buscando verificar las tablas del sistema para el tipado de datos de columna y el SQL dinámico ... –

+0

¿La documentación de PostgreSQL tiene algo sobre la precedencia del tipo de datos? – onedaywhen

Respuesta

6

Su valor es siempre la columna de tipo varchar, parece que quieres verificar si el contenido es un número/entero.

Puede hacerlo creando una función, p.

create function isdigits(text) returns boolean as ' 
select $1 ~ ''^(-)?[0-9]+$'' as result 
' language sql; 

(Esa función probablemente podrían ser implementadas por tratar de convertir el texto a int, o el uso de la función int4() y para controlar el error que se produce también, y NULL volver.)

Con tal la función que podría hacer:

SELECT id, 
     CASE 
     WHEN value IS NULL THEN 0 
     WHEN isdigits(value) THEN (SOME_QUERY) 
     ELSE (ANOTHER_QUERY) 
     END 
    FROM test; 
15

Si alguien se pregunta Como acaba de obtener el tipo de datos de una varible (no columna) puede utilizar la función.

Simplemente

SELECT pg_typeof(your_variable); 

O

SELECT pg_typeof('{}'::text[]); //returns text[]; 

Nota

pg_typeof (varchar_column) devolverá el carácter variable independientemente de el contenido de la columna. Cualquier columna o variable ya está escrita y pg_typeof devolverá ese tipo declarado. No encontrará el tipo de "mejor ajuste " dependiendo del valor de esa columna (o variable). - cita del comentario de a_horse_with_no_name.

+1

'pg_typeof (varchar_column)' devolverá el 'carácter que varía' independientemente del contenido de la columna. Cualquier columna o variable ya está escrita y 'pg_typeof' devolverá ese tipo declarado. No encontrará el tipo de "mejor ajuste" dependiendo del valor de esa columna (o variable). –

+0

@a_horse_with_no_name Gracias, no sabía eso y vine aquí en busca de "cómo obtener el tipo de datos variables", así que pensé que debería compartir un método que me ayudó. Permíteme actualizar con esa información que acabas de compartir. – ArchNoob

Cuestiones relacionadas