在clickhouse中,当使用强制转换函数时,如何为可空列返回null



假设我有一个名为x1的表,其中列c1可为'Int32'空,我想使用' cast '函数将其转换为'Int64'。我发现'CAST'函数不支持空值,所以我必须先用下面的命令转换空值:SELECT CAST(assumeNotNull(c1), 'Int64')它的工作,但返回0为NULL值,我不能使用'nullIf()',因为它会处理零值错误。

我怎么能得到NULL时铸造可空值?

select arrayJoin( [Null::Nullable(Int32), 42::Nullable(Int32)] ) x, 
cast(x, 'Nullable(Int64)') r, 
toInt64(x) r1 ;
┌────x─┬────r─┬───r1─┐
│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
│   42 │   42 │   42 │
└──────┴──────┴──────┘
desc(select arrayJoin( [Null::Nullable(Int32), 42::Nullable(Int32)] ) x, 
cast(x, 'Nullable(Int64)') r, 
toInt64(x) r1 );
┌─name─┬─type────────────┬
│ x    │ Nullable(Int32) │
│ r    │ Nullable(Int64) │
│ r1   │ Nullable(Int64) │
└──────┴─────────────────┴
select arrayJoin( [Null::Nullable(Int32), 42::Nullable(Int32)] ) x, ifNull(x,0)::Int64 r ;
┌────x─┬──r─┐
│ ᴺᵁᴸᴸ │  0 │
│   42 │ 42 │
└──────┴────┘
desc(select arrayJoin( [Null::Nullable(Int32), 42::Nullable(Int32)] ) x, ifNull(x,0)::Int64 r );
┌─name─┬─type────────────┬─
│ x    │ Nullable(Int32) │
│ r    │ Int64           │
└──────┴─────────────────┴─

最新更新