Django LTRIM 函数与自定义字符的使用

问题描述 投票:0回答:1

有没有办法将我们想要修剪的字符传递给 LTRIM 函数。

from django.db.models.functions import LTrim
ModelA.objects.filter(a__startswith="0").update(a=LTrim("a"))

相关SQL

UPDATE "modlea" SET "a" = LTRIM("modela"."a") WHERE "modela"."a"::text LIKE '0%';

这将修剪左侧的空格,但是如何使用 Django 删除左侧的“0”?

它的 SQL 是

UPDATE "modlea" SET "a" = LTRIM("modela"."a", "0") WHERE "modela"."a"::text LIKE '0%';

但是 Django 的等价物是什么?正在尝试以下操作,但它不起作用。

ModelA.objects.filter(a__startswith="0").update(a=LTrim("a", "0"))

失败了

TypeError: 'LTrim' takes exactly 1 argument (2 given)

那么如何将

0
传递给 Django 中的
LTrim
函数呢?

django-models
1个回答
0
投票

如果你想删除前导零,你可以使用

REGEX_REPLACE(…)
 [mariadb],这不是 Django 具有的函数,但我们可以使用
Func
表达式 [ Django-doc]
:

from django.db.models import F, Func, Value

MyModel.objects.filter(my_field__startswith='0').update(
    my_field=Func(
        F('my_field'), Value('^0+'), Value(''), function='REGEX_REPLACE'
    )
)

根据数据库后端,该函数可能有不同的名称。

© www.soinside.com 2019 - 2024. All rights reserved.