3

我可以在and中使用CASE语句吗?substrfilter

这是我的要求:

>> value = '00021050430' #here value is a database column
>> query.filter((func.substr(value,case([(func.length(value) > 7,func.length(varying_value)-7+1))],else_=1),7)=='1050430')

我期待的输出是:

>> query.filter(func.substr(value,6,7))

上面抛出一个错误。

4

1 回答 1

6

您不需要CASE()在此处使用语句。只需使用 Python:

query.filter(func.substr(value, 1 if len(value) > 7 else 1, 7) == '1050430')

这称为条件表达式;它的构造为true_expr if test_expr else false_exprtrue_expr如果test_expr计算结果为 True,则使用 where ,否则false_expr使用该部分。

如果value不是常量而是列引用,那么您确实需要使用CASE()语句。用于sqlalchemy.sql.expression.case()

from sqlalchemy.sql.expression import case

query.filter(func.substr(value, case([(func.length(column) > 7, func.length(column) - 7 + 1)], else_=1), 7) == '1050430')

但你需要确保你的()括号是平衡的(你有一个太多)。

于 2012-12-05T11:54:51.177 回答