假设我有一个名为 x1 的表,其中列 c1 是“Int32”可为空的,我想使用“CAST”函数将其转换为“Int64”。我发现“CAST”函数不支持可空值,因此我必须先使用以下命令转换空值:SELECT CAST(assumeNotNull(c1), 'Int64')
它可以工作,但为 NULL 值返回 0,我也不能使用“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) │
└──────┴─────────────────┴
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句