Seleccionar la subcadena más larga que coincide utilizando el ORM de Django.
Tengo una pregunta que es básicamente la misma que esta, excepto que quiero implementarla usando el ORM de Django si es posible.
La pregunta enlazada dice:
¿Cómo buscaría la coincidencia más larga dentro de una variable varchar? Por ejemplo, la_table tiene entradas de la siguiente manera:
magic_word | premio
sh| $0.20
sha| $0.40
shaz| $0.60
shaza| $1.50
Me gustaría escribir una función plpgsql que tome, entre otros argumentos, una cadena como entrada (por ejemplo, shazam) y devuelva la columna ‘premio’ en la fila de la tabla con la subcadena de coincidencia más larga. En el ejemplo mostrado, eso sería $ 1.50 en la fila con magicword shaza.
La respuesta que quiero emular en Django es
SELECT magic_word
FROM the_table
WHERE ‘shazam’ LIKE (magic_word || ‘%’)
ORDER BY magic_word DESC
LIMIT 1;
… pero no puedo ver cómo hacer la declaración LIKE “al revés”.
(“Al revés” en el sentido de que es la variable de entrada la que está en el lado izquierdo de LIKE)
davy.ai
Respuesta
Se puede utilizar la búsqueda
__startswith
en Django ORM para lograr el mismo resultado. Por ejemplo:palabra_magica = the_table.objects.filter(magic_word__startswith='shazam').order_by('-magic_word').first()