我有一个表,想根据条件将十进制类型的列转换为整数。我需要尽可能高效地执行此操作。
我当前工作的查询如下所示:
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
通常可以有大量的“case when”表达式(>100)。
- 现在第一个问题是表达式非常慢,我需要提高性能,所以我想知道它是否可以像这样进行即时转换,
2 * to_int(col2 > y)
但我找不到这样做的方法。 - 第二个问题是当我有很多“case when”表达式时,我会收到以下错误:
SQL internal parse tree depth exceeds its maximum: parse tree depth exceeds its maximum:255