3

および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_expr。ここで、はTrueと評価されたtrue_expr場合に使用され、それ以外の場合はパーツが使用されます。test_exprfalse_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 に答える