我有一个 SQL 查询来确定与给定输入字符串匹配的最长匹配前缀。用例是查找调用给定目的地的速率,该速率由数据库中的多行确定。最具体的匹配前缀是要使用的前缀。
所以在原始 SQL 中它看起来像这样:
SELECT * FROM rateplan_rates
WHERE '3212345789' LIKE CONCAT(prefix, '%')
ORDER BY CHAR_LENGTH(prefix) DESC LIMIT 1
在上面的示例中,目的地是 3212345789。在实际应用程序中,这是由缓存机制和更多内容支持的,但归根结底就是这样。
我想在我们的 Django 项目中完成同样的 API 调用,并且我知道我也可以在那里使用原始 SQL,但我想知道是否有办法在 Django“queryset-language”中做到这一点.
我被这个问题困扰了:
RateplanRate.objects \
.annotate(prefix_length=Length('prefix'), prefix_match=Concat('prefix', '%')) \
.filter('search_value LIKE prefix_match') \
.order_by('-prefix_length')[0:1]
缺少的部分当然是search_value LIKE prefix_match
。这是可能的还是我应该退回到原始 SQL?
最佳答案
关于python - Django 查询集 : filter by 'value LIKE column' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56218569/