テーブルがあり、条件に基づいてdecimal型の列を整数に変換する必要があります。私は可能な限り演技者としてこれを行う必要があります。高性能なselect節に式をキャストする方法
私の現在の作業クエリは次のようになります。 select *, (case when C_CUSTKEY < 20 then 1 else 0 end) as bit from TPCH.CUSTOMER
は、しかし、私はこれを改善しようとしています。その場でコンバージョンを行うことは可能ですか? select *, cast((C_CUSTKEY < 20) as integer) as bit from TPCH.CUSTOMER
たりなどの簡単なバージョンのために:このような何かに関係なく、私が使用しているものの機能 select *, (C_CUSTKEY < 20) as bit from TPCH.CUSTOMER
、私は常に次のエラーを取得: sql syntax error: incorrect syntax near "<"
を更新1
ので、理解しやすくするために、私がしたいことの実際の使用目的は以下の通りです:
select ((case when col1 < x then 1 else 0 end) + (case when col2 > y then 2 else 0 end)) as bitset from TPCH.CUSTOMER
一般に、大文字と小文字の区別があります(> 100)。
- は今、最初の問題は、式が非常に遅いことであると私はその可能ならば
2 * to_int(col2 > y)
のようなフライなめらかに変換するに知りたいと思ったので、パフォーマンスを向上させる必要があるが、私はこれを行うための方法を見つけることができません。ここでは、ユースケースについてSQL internal parse tree depth exceeds its maximum: parse tree depth exceeds its maximum:255
これは私が現在やっていることですが、私は実際にBIT列を実現したくありません。また、これは正しい構文ではないことに気づいています。なぜなら、(field
Jan
@Jan投稿した例は、投稿されたとおりにSPS11で動作します。マテリアライズしたくない場合は、単にselectコマンドの投影部分のcase条件を使用してください。 –
あなたは私が質問に書いたようにそれを意味するのですか?それは私の目的にとっては遅すぎます。私は、「事例」表現のパフォーマンスを改善する必要があります。 ( "C_CUSTKEY"> 40)、次に2 else 0 end)+ ... '' 'もっと多くの ' 「表現が非常に遅い場合には – Jan