2 回答

TA貢獻1804條經驗 獲得超2個贊
您可以按使用 annotate 創建的字段進行排序:
from django.db.models import IntegerField, Value as V
from django.db.models.functions import Cast, StrIndex, Substr
last = (
Machine.objects.annotate(
part=Cast(Substr("deviceSerialNo", StrIndex("deviceSerialNo", V("-"))), IntegerField())
)
.order_by("part")
.first()
.deviceSerialNo
)
就像你讓我們從獲取-字符的索引開始:
StrIndex('deviceSerialNo', V('-'))
然后我們利用Substr得到包括-字符的第二部分:
Substr("deviceSerialNo", StrIndex("deviceSerialNo", V("-")))
然后我們將它轉換為一個 IntegerField,排序并得到第一個對象。注意:我們可以得到第一個對象,因為 的整數轉換"-12344"是負數。

TA貢獻1862條經驗 獲得超6個贊
如果數字有多個 - 并且想要從反向中提取數字,請嘗試以下操作。AB-12-12344
輸出:12344
qs.annotate(
r_part=Reverse('number')
).annotate(
part=Reverse(
Cast(
Substr("r_part", 1, StrIndex("r_part", V("-")))
),
IntegerField()
)
)
謝謝
添加回答
舉報