我可以使用CASE内声明substr和filter?
这是我的要求:
>> 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')
Run Code Online (Sandbox Code Playgroud)
我期待的输出是:
>> query.filter(func.substr(value,6,7))
Run Code Online (Sandbox Code Playgroud)
以上引发了错误.
您不需要CASE()在此处使用声明.只需使用Python:
query.filter(func.substr(value, 1 if len(value) > 7 else 1, 7) == '1050430')
Run Code Online (Sandbox Code Playgroud)
这称为条件表达式; 它被构造为true_expr if test_expr else false_expr,true_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')
Run Code Online (Sandbox Code Playgroud)
但你需要确保你的(和)括号是平衡的(你有一个太多).
| 归档时间: |
|
| 查看次数: |
3543 次 |
| 最近记录: |