Estoy creando una herramienta de búsqueda para Postgres. Tendrá varias entradas de texto (una para cada columna de la tabla). Cuando la entrada de texto está en blanco, quiero que la consulta coincida con todas y cada una de las entradas de la tabla. es posible? Yo he tratado:
SELECT name FROM contacts WHERE surname = '*'; SELECT name FROM contacts WHERE surname = *;
Como puede imaginar, esto no devuelve nada ya que no hay un apellido de *, y la segunda consulta no es válida. ¿Algunas ideas?
EDITAR:
Debido a la naturaleza de lo que estoy haciendo, un SELECT name FROM contacts
no es suficiente. Supongo que podría hacerlo funcionar, pero sería feo. Quiero un WHERE
para cada columna de la tabla, pero si la búsqueda de una columna determinada es una cadena vacía, quiero que busque todas las entradas de la tabla.
Quiero que la consulta coincida con todas y cada una de las entradas de la tabla.
Simplemente use SELECT
sin la cláusula WHERE surname
. Simple como eso.
SELECT name FROM contacts
Pero si desea utilizar una consulta, puede hacerlo de esta manera:
cur.execute( """SELECT name FROM contacts WHERE (CASE WHEN %(entry)s != '' THEN surname = %(entry)s ELSE true END)""" , {'entry': "John Doe"} )
En cuanto a su respuesta, usó la coincidencia de expresiones regulares. En la pregunta nunca lo mencionaste. Así que supongo que no es lo que querías. Las expresiones regulares tienen una sintaxis específica, y si se ingresa algún formato de expresión regular no válido en la entrada de texto, la consulta fallará.